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 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
116 const Text* startText = earliestLogicallyAdjacentTextNode(this); | 116 const Text* startText = earliestLogicallyAdjacentTextNode(this); |
117 const Text* endText = latestLogicallyAdjacentTextNode(this); | 117 const Text* endText = latestLogicallyAdjacentTextNode(this); |
118 | 118 |
119 Node* onePastEndText = endText->nextSibling(); | 119 Node* onePastEndText = endText->nextSibling(); |
120 unsigned resultLength = 0; | 120 unsigned resultLength = 0; |
121 for (const Node* n = startText; n != onePastEndText; n = n->nextSibling()) { | 121 for (const Node* n = startText; n != onePastEndText; n = n->nextSibling()) { |
122 if (!n->isTextNode()) | 122 if (!n->isTextNode()) |
123 continue; | 123 continue; |
124 const Text* t = static_cast<const Text*>(n); | 124 const Text* t = static_cast<const Text*>(n); |
125 const String& data = t->data(); | 125 const String& data = t->data(); |
| 126 if (std::numeric_limits<unsigned>::max() - data.length() < resultLength) |
| 127 CRASH(); |
126 resultLength += data.length(); | 128 resultLength += data.length(); |
127 } | 129 } |
128 UChar* resultData; | 130 UChar* resultData; |
129 String result = String::createUninitialized(resultLength, resultData); | 131 String result = String::createUninitialized(resultLength, resultData); |
130 UChar* p = resultData; | 132 UChar* p = resultData; |
131 for (const Node* n = startText; n != onePastEndText; n = n->nextSibling()) { | 133 for (const Node* n = startText; n != onePastEndText; n = n->nextSibling()) { |
132 if (!n->isTextNode()) | 134 if (!n->isTextNode()) |
133 continue; | 135 continue; |
134 const Text* t = static_cast<const Text*>(n); | 136 const Text* t = static_cast<const Text*>(n); |
135 const String& data = t->data(); | 137 const String& data = t->data(); |
(...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
347 result += "; "; | 349 result += "; "; |
348 result += "value="; | 350 result += "value="; |
349 result += s; | 351 result += s; |
350 } | 352 } |
351 | 353 |
352 strncpy(buffer, result.utf8().data(), length - 1); | 354 strncpy(buffer, result.utf8().data(), length - 1); |
353 } | 355 } |
354 #endif | 356 #endif |
355 | 357 |
356 } // namespace WebCore | 358 } // namespace WebCore |
OLD | NEW |