Changeset 145482 in webkit
- Timestamp:
- Mar 11, 2013 10:51:05 PM (11 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r145417 r145482 1 2013-03-11 Oliver Hunt <oliver@apple.com> 2 3 Harden JSStringJoiner 4 https://bugs.webkit.org/show_bug.cgi?id=112093 5 6 Reviewed by Filip Pizlo. 7 8 Harden JSStringJoiner, make it use our CheckedArithmetic 9 class to simplify everything. 10 11 * runtime/JSStringJoiner.cpp: 12 (JSC::JSStringJoiner::build): 13 * runtime/JSStringJoiner.h: 14 (JSStringJoiner): 15 (JSC::JSStringJoiner::JSStringJoiner): 16 (JSC::JSStringJoiner::append): 17 1 18 2013-03-11 Michael Saboff <msaboff@apple.com> 2 19 -
trunk/Source/JavaScriptCore/runtime/JSStringJoiner.cpp
r139541 r145482 103 103 return jsEmptyString(exec); 104 104 105 size_tseparatorLength = m_separator.length();105 Checked<size_t, RecordOverflow> separatorLength = m_separator.length(); 106 106 // FIXME: add special cases of joinStrings() for (separatorLength == 0) and (separatorLength == 1). 107 107 ASSERT(m_strings.size() > 0); 108 size_ttotalSeparactorsLength = separatorLength * (m_strings.size() - 1);109 size_t outputStringSize = totalSeparactorsLength + m_cumulatedStringsLength;108 Checked<size_t, RecordOverflow> totalSeparactorsLength = separatorLength * (m_strings.size() - 1); 109 Checked<size_t, RecordOverflow> outputStringSize = totalSeparactorsLength + m_accumulatedStringsLength; 110 110 111 size_t finalSize; 112 if (outputStringSize.safeGet(finalSize)) 113 return throwOutOfMemoryError(exec); 114 111 115 if (!outputStringSize) 112 116 return jsEmptyString(exec); … … 114 118 RefPtr<StringImpl> outputStringImpl; 115 119 if (m_is8Bits) 116 outputStringImpl = joinStrings<LChar>(m_strings, m_separator, outputStringSize);120 outputStringImpl = joinStrings<LChar>(m_strings, m_separator, finalSize); 117 121 else 118 outputStringImpl = joinStrings<UChar>(m_strings, m_separator, outputStringSize);122 outputStringImpl = joinStrings<UChar>(m_strings, m_separator, finalSize); 119 123 120 124 if (!outputStringImpl) -
trunk/Source/JavaScriptCore/runtime/JSStringJoiner.h
r140718 r145482 47 47 Vector<String> m_strings; 48 48 49 unsigned m_cumulatedStringsLength;49 Checked<unsigned, RecordOverflow> m_accumulatedStringsLength; 50 50 bool m_isValid; 51 51 bool m_is8Bits; … … 54 54 inline JSStringJoiner::JSStringJoiner(const String& separator, size_t stringCount) 55 55 : m_separator(separator) 56 , m_cumulatedStringsLength(0)57 56 , m_isValid(true) 58 57 , m_is8Bits(m_separator.is8Bit()) … … 67 66 return; 68 67 69 m_strings. uncheckedAppend(str);68 m_strings.append(str); 70 69 if (!str.isNull()) { 71 m_ cumulatedStringsLength += str.length();70 m_accumulatedStringsLength += str.length(); 72 71 m_is8Bits = m_is8Bits && str.is8Bit(); 73 72 }
Note: See TracChangeset
for help on using the changeset viewer.