| Index: Source/core/rendering/RenderText.cpp | 
| diff --git a/Source/core/rendering/RenderText.cpp b/Source/core/rendering/RenderText.cpp | 
| index ccd71651ab57699eacf801c81cc502c5cc814e9b..dab93595c4b5b1304102845b2fa66e9d4cd7c73f 100644 | 
| --- a/Source/core/rendering/RenderText.cpp | 
| +++ b/Source/core/rendering/RenderText.cpp | 
| @@ -98,7 +98,7 @@ static void makeCapitalized(String* string, UChar previous) | 
| return; | 
|  | 
| unsigned length = string->length(); | 
| -    const UChar* characters = string->characters(); | 
| +    const StringImpl& input = *string->impl(); | 
|  | 
| if (length >= numeric_limits<unsigned>::max()) | 
| CRASH(); | 
| @@ -107,28 +107,29 @@ static void makeCapitalized(String* string, UChar previous) | 
| stringWithPrevious[0] = previous == noBreakSpace ? ' ' : previous; | 
| for (unsigned i = 1; i < length + 1; i++) { | 
| // Replace   with a real space since ICU no longer treats   as a word separator. | 
| -        if (characters[i - 1] == noBreakSpace) | 
| +        if (input[i - 1] == noBreakSpace) | 
| stringWithPrevious[i] = ' '; | 
| else | 
| -            stringWithPrevious[i] = characters[i - 1]; | 
| +            stringWithPrevious[i] = input[i - 1]; | 
| } | 
|  | 
| TextBreakIterator* boundary = wordBreakIterator(stringWithPrevious.characters(), length + 1); | 
| if (!boundary) | 
| return; | 
|  | 
| -    StringBuffer<UChar> data(length); | 
| +    StringBuilder result; | 
| +    result.reserveCapacity(length); | 
|  | 
| int32_t endOfWord; | 
| int32_t startOfWord = textBreakFirst(boundary); | 
| for (endOfWord = textBreakNext(boundary); endOfWord != TextBreakDone; startOfWord = endOfWord, endOfWord = textBreakNext(boundary)) { | 
| if (startOfWord) // Ignore first char of previous string | 
| -            data[startOfWord - 1] = characters[startOfWord - 1] == noBreakSpace ? noBreakSpace : toTitleCase(stringWithPrevious[startOfWord]); | 
| +            result.append(input[startOfWord - 1] == noBreakSpace ? noBreakSpace : toTitleCase(stringWithPrevious[startOfWord])); | 
| for (int i = startOfWord + 1; i < endOfWord; i++) | 
| -            data[i - 1] = characters[i - 1]; | 
| +            result.append(input[i - 1]); | 
| } | 
|  | 
| -    *string = String::adopt(data); | 
| +    *string = result.toString(); | 
| } | 
|  | 
| RenderText::RenderText(Node* node, PassRefPtr<StringImpl> str) | 
|  |