Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
| 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) | 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) |
| 4 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved. | 4 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved. |
| 5 * | 5 * |
| 6 * This library is free software; you can redistribute it and/or | 6 * This library is free software; you can redistribute it and/or |
| 7 * modify it under the terms of the GNU Library General Public | 7 * modify it under the terms of the GNU Library General Public |
| 8 * License as published by the Free Software Foundation; either | 8 * License as published by the Free Software Foundation; either |
| 9 * version 2 of the License, or (at your option) any later version. | 9 * version 2 of the License, or (at your option) any later version. |
| 10 * | 10 * |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 101 String newStr = m_data; | 101 String newStr = m_data; |
| 102 newStr.insert(data, offset); | 102 newStr.insert(data, offset); |
| 103 | 103 |
| 104 setDataAndUpdate(newStr, offset, 0, data.length(), recalcStyleBehavior); | 104 setDataAndUpdate(newStr, offset, 0, data.length(), recalcStyleBehavior); |
| 105 | 105 |
| 106 document().didInsertText(this, offset, data.length()); | 106 document().didInsertText(this, offset, data.length()); |
| 107 } | 107 } |
| 108 | 108 |
| 109 void CharacterData::deleteData(unsigned offset, unsigned count, ExceptionState& exceptionState, RecalcStyleBehavior recalcStyleBehavior) | 109 void CharacterData::deleteData(unsigned offset, unsigned count, ExceptionState& exceptionState, RecalcStyleBehavior recalcStyleBehavior) |
| 110 { | 110 { |
| 111 if (offset > length()) { | 111 const unsigned dataLength = length(); |
| 112 | |
| 113 if (offset > dataLength) { | |
| 112 exceptionState.throwDOMException(IndexSizeError, "The offset " + String: :number(offset) + " is greater than the node's length (" + String::number(length ()) + ")."); | 114 exceptionState.throwDOMException(IndexSizeError, "The offset " + String: :number(offset) + " is greater than the node's length (" + String::number(length ()) + ")."); |
| 113 return; | 115 return; |
| 114 } | 116 } |
| 115 | 117 |
| 118 if (count > (dataLength - offset)) { | |
|
sof
2014/03/19 11:40:18
If not already, you may want to consider handling
| |
| 119 exceptionState.throwDOMException(IndexSizeError, "Cannot delete " + Stri ng::number(count) + " characters, this is greater than the node's length with th e given offset."); | |
| 120 return; | |
| 121 } | |
| 122 | |
| 116 unsigned realCount; | 123 unsigned realCount; |
| 117 if (offset + count > length()) | 124 if (offset + count > dataLength) |
| 118 realCount = length() - offset; | 125 realCount = dataLength - offset; |
| 119 else | 126 else |
| 120 realCount = count; | 127 realCount = count; |
| 121 | 128 |
| 122 String newStr = m_data; | 129 String newStr = m_data; |
| 123 newStr.remove(offset, realCount); | 130 newStr.remove(offset, realCount); |
| 124 | 131 |
| 125 setDataAndUpdate(newStr, offset, count, 0, recalcStyleBehavior); | 132 setDataAndUpdate(newStr, offset, count, 0, recalcStyleBehavior); |
| 126 | 133 |
| 127 document().didRemoveText(this, offset, realCount); | 134 document().didRemoveText(this, offset, realCount); |
| 128 } | 135 } |
| 129 | 136 |
| 130 void CharacterData::replaceData(unsigned offset, unsigned count, const String& d ata, ExceptionState& exceptionState) | 137 void CharacterData::replaceData(unsigned offset, unsigned count, const String& d ata, ExceptionState& exceptionState) |
| 131 { | 138 { |
| 132 if (offset > length()) { | 139 const unsigned dataLength = length(); |
| 140 | |
| 141 if (offset > dataLength) { | |
| 133 exceptionState.throwDOMException(IndexSizeError, "The offset " + String: :number(offset) + " is greater than the node's length (" + String::number(length ()) + ")."); | 142 exceptionState.throwDOMException(IndexSizeError, "The offset " + String: :number(offset) + " is greater than the node's length (" + String::number(length ()) + ")."); |
| 134 return; | 143 return; |
| 135 } | 144 } |
| 136 | 145 |
| 146 if (count > (dataLength - offset)) { | |
| 147 exceptionState.throwDOMException(IndexSizeError, "Cannot replace " + Str ing::number(count) + " characters, this is greater than the node's length with t he given offset."); | |
| 148 return; | |
| 149 } | |
| 150 | |
| 137 unsigned realCount; | 151 unsigned realCount; |
| 138 if (offset + count > length()) | 152 if (offset + count > dataLength) |
| 139 realCount = length() - offset; | 153 realCount = dataLength - offset; |
| 140 else | 154 else |
| 141 realCount = count; | 155 realCount = count; |
| 142 | 156 |
| 143 String newStr = m_data; | 157 String newStr = m_data; |
| 144 newStr.remove(offset, realCount); | 158 newStr.remove(offset, realCount); |
| 145 newStr.insert(data, offset); | 159 newStr.insert(data, offset); |
| 146 | 160 |
| 147 setDataAndUpdate(newStr, offset, count, data.length()); | 161 setDataAndUpdate(newStr, offset, count, data.length()); |
| 148 | 162 |
| 149 // update the markers for spell checking and grammar checking | 163 // update the markers for spell checking and grammar checking |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 205 { | 219 { |
| 206 return static_cast<int>(length()); | 220 return static_cast<int>(length()); |
| 207 } | 221 } |
| 208 | 222 |
| 209 bool CharacterData::offsetInCharacters() const | 223 bool CharacterData::offsetInCharacters() const |
| 210 { | 224 { |
| 211 return true; | 225 return true; |
| 212 } | 226 } |
| 213 | 227 |
| 214 } // namespace WebCore | 228 } // namespace WebCore |
| OLD | NEW |