<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[161861] trunk/Source</title>
</head>
<body>
<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; }
#msg dl a { font-weight: bold}
#msg dl a:link { color:#fc3; }
#msg dl a:active { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/161861">161861</a></dd>
<dt>Author</dt> <dd>commit-queue@webkit.org</dd>
<dt>Date</dt> <dd>2014-01-12 22:26:50 -0800 (Sun, 12 Jan 2014)</dd>
</dl>
<h3>Log Message</h3>
<pre>Unreviewed, rolling out <a href="http://trac.webkit.org/projects/webkit/changeset/161840">r161840</a>.
http://trac.webkit.org/changeset/161840
https://bugs.webkit.org/show_bug.cgi?id=126870
Caused jsscore and layout test failures (Requested by smfr on
#webkit).
Source/JavaScriptCore:
* API/JSValueRef.cpp:
(JSValueMakeFromJSONString):
* bindings/ScriptValue.cpp:
(Deprecated::jsToInspectorValue):
* inspector/InspectorValues.cpp:
* runtime/DatePrototype.cpp:
(JSC::formatLocaleDate):
* runtime/Identifier.h:
(JSC::Identifier::characters):
* runtime/JSStringBuilder.h:
(JSC::JSStringBuilder::append):
Source/WebCore:
* bindings/objc/WebScriptObject.mm:
(+[WebScriptObject _convertValueToObjcValue:JSC::originRootObject:rootObject:]):
* editing/CompositeEditCommand.cpp:
(WebCore::containsOnlyWhitespace):
* editing/TypingCommand.cpp:
(WebCore::TypingCommand::insertText):
* editing/VisibleUnits.cpp:
(WebCore::startOfParagraph):
(WebCore::endOfParagraph):
* html/parser/HTMLParserIdioms.cpp:
(WebCore::stripLeadingAndTrailingHTMLSpaces):
(WebCore::parseHTMLNonNegativeInteger):
* inspector/ContentSearchUtils.cpp:
(WebCore::ContentSearchUtils::createSearchRegexSource):
* inspector/InspectorStyleSheet.cpp:
(WebCore::InspectorStyle::newLineAndWhitespaceDelimiters):
* inspector/InspectorStyleTextEditor.cpp:
(WebCore::InspectorStyleTextEditor::insertProperty):
(WebCore::InspectorStyleTextEditor::internalReplaceProperty):
* platform/Length.cpp:
(WebCore::newCoordsArray):
* platform/LinkHash.cpp:
(WebCore::visitedLinkHash):
* platform/graphics/Color.cpp:
(WebCore::Color::parseHexColor):
(WebCore::Color::Color):
* platform/graphics/TextRun.h:
(WebCore::TextRun::TextRun):
* platform/text/TextEncodingRegistry.cpp:
(WebCore::atomicCanonicalTextEncodingName):
* rendering/RenderBlock.cpp:
(WebCore::RenderBlock::constructTextRun):
* rendering/RenderCombineText.cpp:
(WebCore::RenderCombineText::width):
* svg/SVGFontElement.cpp:
(WebCore::SVGFontElement::registerLigaturesInGlyphCache):
* xml/XPathFunctions.cpp:
(WebCore::XPath::FunId::evaluate):
* xml/XPathNodeSet.h:
Source/WTF:
* wtf/text/StringImpl.cpp:
(WTF::StringImpl::replace):
* wtf/text/WTFString.h:
(WTF::String::isAllSpecialCharacters):</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceJavaScriptCoreAPIJSValueRefcpp">trunk/Source/JavaScriptCore/API/JSValueRef.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreChangeLog">trunk/Source/JavaScriptCore/ChangeLog</a></li>
<li><a href="#trunkSourceJavaScriptCorebindingsScriptValuecpp">trunk/Source/JavaScriptCore/bindings/ScriptValue.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreinspectorInspectorValuescpp">trunk/Source/JavaScriptCore/inspector/InspectorValues.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeDatePrototypecpp">trunk/Source/JavaScriptCore/runtime/DatePrototype.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeIdentifierh">trunk/Source/JavaScriptCore/runtime/Identifier.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSStringBuilderh">trunk/Source/JavaScriptCore/runtime/JSStringBuilder.h</a></li>
<li><a href="#trunkSourceWTFChangeLog">trunk/Source/WTF/ChangeLog</a></li>
<li><a href="#trunkSourceWTFwtftextStringImplcpp">trunk/Source/WTF/wtf/text/StringImpl.cpp</a></li>
<li><a href="#trunkSourceWTFwtftextWTFStringh">trunk/Source/WTF/wtf/text/WTFString.h</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCorebindingsobjcWebScriptObjectmm">trunk/Source/WebCore/bindings/objc/WebScriptObject.mm</a></li>
<li><a href="#trunkSourceWebCoreeditingCompositeEditCommandcpp">trunk/Source/WebCore/editing/CompositeEditCommand.cpp</a></li>
<li><a href="#trunkSourceWebCoreeditingTypingCommandcpp">trunk/Source/WebCore/editing/TypingCommand.cpp</a></li>
<li><a href="#trunkSourceWebCoreeditingVisibleUnitscpp">trunk/Source/WebCore/editing/VisibleUnits.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlparserHTMLParserIdiomscpp">trunk/Source/WebCore/html/parser/HTMLParserIdioms.cpp</a></li>
<li><a href="#trunkSourceWebCoreinspectorContentSearchUtilscpp">trunk/Source/WebCore/inspector/ContentSearchUtils.cpp</a></li>
<li><a href="#trunkSourceWebCoreinspectorInspectorStyleSheetcpp">trunk/Source/WebCore/inspector/InspectorStyleSheet.cpp</a></li>
<li><a href="#trunkSourceWebCoreinspectorInspectorStyleTextEditorcpp">trunk/Source/WebCore/inspector/InspectorStyleTextEditor.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformLengthcpp">trunk/Source/WebCore/platform/Length.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformLinkHashcpp">trunk/Source/WebCore/platform/LinkHash.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsColorcpp">trunk/Source/WebCore/platform/graphics/Color.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsTextRunh">trunk/Source/WebCore/platform/graphics/TextRun.h</a></li>
<li><a href="#trunkSourceWebCoreplatformtextTextEncodingRegistrycpp">trunk/Source/WebCore/platform/text/TextEncodingRegistry.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderBlockcpp">trunk/Source/WebCore/rendering/RenderBlock.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderCombineTextcpp">trunk/Source/WebCore/rendering/RenderCombineText.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGFontElementcpp">trunk/Source/WebCore/svg/SVGFontElement.cpp</a></li>
<li><a href="#trunkSourceWebCorexmlXPathFunctionscpp">trunk/Source/WebCore/xml/XPathFunctions.cpp</a></li>
<li><a href="#trunkSourceWebCorexmlXPathNodeSeth">trunk/Source/WebCore/xml/XPathNodeSet.h</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceJavaScriptCoreAPIJSValueRefcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/API/JSValueRef.cpp (161860 => 161861)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/API/JSValueRef.cpp        2014-01-13 06:18:14 UTC (rev 161860)
+++ trunk/Source/JavaScriptCore/API/JSValueRef.cpp        2014-01-13 06:26:50 UTC (rev 161861)
</span><span class="lines">@@ -323,11 +323,11 @@
</span><span class="cx"> APIEntryShim entryShim(exec);
</span><span class="cx"> String str = string->string();
</span><span class="cx"> unsigned length = str.length();
</span><del>- if (str.is8Bit()) {
</del><ins>+ if (length && str.is8Bit()) {
</ins><span class="cx"> LiteralParser<LChar> parser(exec, str.characters8(), length, StrictJSON);
</span><span class="cx"> return toRef(exec, parser.tryLiteralParse());
</span><span class="cx"> }
</span><del>- LiteralParser<UChar> parser(exec, str.characters16(), length, StrictJSON);
</del><ins>+ LiteralParser<UChar> parser(exec, str.characters(), length, StrictJSON);
</ins><span class="cx"> return toRef(exec, parser.tryLiteralParse());
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ChangeLog (161860 => 161861)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ChangeLog        2014-01-13 06:18:14 UTC (rev 161860)
+++ trunk/Source/JavaScriptCore/ChangeLog        2014-01-13 06:26:50 UTC (rev 161861)
</span><span class="lines">@@ -1,3 +1,24 @@
</span><ins>+2014-01-12 Commit Queue <commit-queue@webkit.org>
+
+ Unreviewed, rolling out r161840.
+ http://trac.webkit.org/changeset/161840
+ https://bugs.webkit.org/show_bug.cgi?id=126870
+
+ Caused jsscore and layout test failures (Requested by smfr on
+ #webkit).
+
+ * API/JSValueRef.cpp:
+ (JSValueMakeFromJSONString):
+ * bindings/ScriptValue.cpp:
+ (Deprecated::jsToInspectorValue):
+ * inspector/InspectorValues.cpp:
+ * runtime/DatePrototype.cpp:
+ (JSC::formatLocaleDate):
+ * runtime/Identifier.h:
+ (JSC::Identifier::characters):
+ * runtime/JSStringBuilder.h:
+ (JSC::JSStringBuilder::append):
+
</ins><span class="cx"> 2014-01-12 Darin Adler <darin@apple.com>
</span><span class="cx">
</span><span class="cx"> Add deprecatedCharacters as a synonym for characters and convert most call sites
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebindingsScriptValuecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bindings/ScriptValue.cpp (161860 => 161861)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bindings/ScriptValue.cpp        2014-01-13 06:18:14 UTC (rev 161860)
+++ trunk/Source/JavaScriptCore/bindings/ScriptValue.cpp        2014-01-13 06:26:50 UTC (rev 161861)
</span><span class="lines">@@ -115,8 +115,10 @@
</span><span class="cx"> return InspectorBasicValue::create(value.asBoolean());
</span><span class="cx"> if (value.isNumber())
</span><span class="cx"> return InspectorBasicValue::create(value.asNumber());
</span><del>- if (value.isString())
- return InspectorString::create(value.getString(scriptState));
</del><ins>+ if (value.isString()) {
+ String s = value.getString(scriptState);
+ return InspectorString::create(String(s.characters(), s.length()));
+ }
</ins><span class="cx">
</span><span class="cx"> if (value.isObject()) {
</span><span class="cx"> if (isJSArray(value)) {
</span><span class="lines">@@ -136,11 +138,13 @@
</span><span class="cx"> JSObject* object = value.getObject();
</span><span class="cx"> PropertyNameArray propertyNames(scriptState);
</span><span class="cx"> object->methodTable()->getOwnPropertyNames(object, scriptState, propertyNames, ExcludeDontEnumProperties);
</span><del>- for (auto& name : propertyNames) {
- RefPtr<InspectorValue> inspectorValue = jsToInspectorValue(scriptState, object->get(scriptState, name), maxDepth);
</del><ins>+ for (size_t i = 0; i < propertyNames.size(); i++) {
+ const Identifier& name = propertyNames[i];
+ JSValue propertyValue = object->get(scriptState, name);
+ RefPtr<InspectorValue> inspectorValue = jsToInspectorValue(scriptState, propertyValue, maxDepth);
</ins><span class="cx"> if (!inspectorValue)
</span><span class="cx"> return nullptr;
</span><del>- inspectorObject->setValue(name.string(), inspectorValue);
</del><ins>+ inspectorObject->setValue(String(name.characters(), name.length()), inspectorValue);
</ins><span class="cx"> }
</span><span class="cx"> return inspectorObject;
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreinspectorInspectorValuescpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/inspector/InspectorValues.cpp (161860 => 161861)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/inspector/InspectorValues.cpp        2014-01-13 06:18:14 UTC (rev 161860)
+++ trunk/Source/JavaScriptCore/inspector/InspectorValues.cpp        2014-01-13 06:26:50 UTC (rev 161861)
</span><span class="lines">@@ -446,17 +446,14 @@
</span><span class="cx">
</span><span class="cx"> inline bool escapeChar(UChar c, StringBuilder* dst)
</span><span class="cx"> {
</span><del>- // Must escape < and > to prevent script execution.
</del><span class="cx"> switch (c) {
</span><del>- case '\b': dst->appendLiteral("\\b"); break;
- case '\f': dst->appendLiteral("\\f"); break;
- case '\n': dst->appendLiteral("\\n"); break;
- case '\r': dst->appendLiteral("\\r"); break;
- case '\t': dst->appendLiteral("\\t"); break;
- case '\\': dst->appendLiteral("\\\\"); break;
- case '"': dst->appendLiteral("\\\""); break;
- case '<': dst->appendLiteral("\\u003C"); break;
- case '>': dst->appendLiteral("\\u003E"); break;
</del><ins>+ case '\b': dst->append("\\b", 2); break;
+ case '\f': dst->append("\\f", 2); break;
+ case '\n': dst->append("\\n", 2); break;
+ case '\r': dst->append("\\r", 2); break;
+ case '\t': dst->append("\\t", 2); break;
+ case '\\': dst->append("\\\\", 2); break;
+ case '"': dst->append("\\\"", 2); break;
</ins><span class="cx"> default:
</span><span class="cx"> return false;
</span><span class="cx"> }
</span><span class="lines">@@ -469,13 +466,15 @@
</span><span class="cx"> for (unsigned i = 0; i < str.length(); ++i) {
</span><span class="cx"> UChar c = str[i];
</span><span class="cx"> if (!escapeChar(c, dst)) {
</span><del>- // We could format c > 126 as UTF-8 instead of escaping them.
- if (c >= 32 || c <= 126)
</del><ins>+ if (c < 32 || c > 126 || c == '<' || c == '>') {
+ // 1. Escaping <, > to prevent script execution.
+ // 2. Technically, we could also pass through c > 126 as UTF8, but this
+ // is also optional. It would also be a pain to implement here.
+ unsigned int symbol = static_cast<unsigned int>(c);
+ String symbolCode = String::format("\\u%04X", symbol);
+ dst->append(symbolCode.characters(), symbolCode.length());
+ } else
</ins><span class="cx"> dst->append(c);
</span><del>- else {
- // FIXME: Way too slow to do this by creating and destroying a string each time.
- dst->append(String::format("\\u%04X", static_cast<unsigned>(c)));
- }
</del><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx"> dst->append('"');
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeDatePrototypecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/DatePrototype.cpp (161860 => 161861)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/DatePrototype.cpp        2014-01-13 06:18:14 UTC (rev 161860)
+++ trunk/Source/JavaScriptCore/runtime/DatePrototype.cpp        2014-01-13 06:26:50 UTC (rev 161861)
</span><span class="lines">@@ -162,14 +162,33 @@
</span><span class="cx"> else if (format != LocaleDate && !exec->argument(0).isUndefined())
</span><span class="cx"> timeStyle = styleFromArgString(arg0String, timeStyle);
</span><span class="cx">
</span><del>- RetainPtr<CFDateFormatterRef> formatter = adoptCF(CFDateFormatterCreate(kCFAllocatorDefault, adoptCF(CFLocaleCopyCurrent()).get(), dateStyle, timeStyle));
</del><ins>+ CFLocaleRef locale = CFLocaleCopyCurrent();
+ CFDateFormatterRef formatter = CFDateFormatterCreate(0, locale, dateStyle, timeStyle);
+ CFRelease(locale);
</ins><span class="cx">
</span><del>- if (useCustomFormat)
- CFDateFormatterSetFormat(formatter.get(), customFormatString.createCFString().get());
</del><ins>+ if (useCustomFormat) {
+ CFStringRef customFormatCFString = CFStringCreateWithCharacters(0, customFormatString.characters(), customFormatString.length());
+ CFDateFormatterSetFormat(formatter, customFormatCFString);
+ CFRelease(customFormatCFString);
+ }
</ins><span class="cx">
</span><del>- RetainPtr<CFStringRef> string = adoptCF(CFDateFormatterCreateStringWithAbsoluteTime(kCFAllocatorDefault, formatter.get(), floor(timeInMilliseconds / msPerSecond) - kCFAbsoluteTimeIntervalSince1970));
</del><ins>+ CFStringRef string = CFDateFormatterCreateStringWithAbsoluteTime(0, formatter, floor(timeInMilliseconds / msPerSecond) - kCFAbsoluteTimeIntervalSince1970);
</ins><span class="cx">
</span><del>- return jsNontrivialString(exec, string.get());
</del><ins>+ CFRelease(formatter);
+
+ // We truncate the string returned from CFDateFormatter if it's absurdly long (> 200 characters).
+ // That's not great error handling, but it just won't happen so it doesn't matter.
+ UChar buffer[200];
+ const size_t bufferLength = WTF_ARRAY_LENGTH(buffer);
+ size_t length = CFStringGetLength(string);
+ ASSERT(length <= bufferLength);
+ if (length > bufferLength)
+ length = bufferLength;
+ CFStringGetCharacters(string, CFRangeMake(0, length), buffer);
+
+ CFRelease(string);
+
+ return jsNontrivialString(exec, String(buffer, length));
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> #elif USE(ICU_UNICODE) && !UCONFIG_NO_FORMATTING
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeIdentifierh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/Identifier.h (161860 => 161861)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/Identifier.h        2014-01-13 06:18:14 UTC (rev 161860)
+++ trunk/Source/JavaScriptCore/runtime/Identifier.h        2014-01-13 06:26:50 UTC (rev 161861)
</span><span class="lines">@@ -55,6 +55,7 @@
</span><span class="cx"> const String& string() const { return m_string; }
</span><span class="cx"> StringImpl* impl() const { return m_string.impl(); }
</span><span class="cx">
</span><ins>+ const UChar* characters() const { return m_string.characters(); }
</ins><span class="cx"> int length() const { return m_string.length(); }
</span><span class="cx">
</span><span class="cx"> CString ascii() const { return m_string.ascii(); }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSStringBuilderh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSStringBuilder.h (161860 => 161861)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSStringBuilder.h        2014-01-13 06:18:14 UTC (rev 161860)
+++ trunk/Source/JavaScriptCore/runtime/JSStringBuilder.h        2014-01-13 06:26:50 UTC (rev 161861)
</span><span class="lines">@@ -105,7 +105,7 @@
</span><span class="cx"> }
</span><span class="cx"> upConvert();
</span><span class="cx"> }
</span><del>- m_okay &= buffer16.tryAppend(str.characters16(), length);
</del><ins>+ m_okay &= buffer16.tryAppend(str.characters(), length);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void upConvert()
</span></span></pre></div>
<a id="trunkSourceWTFChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/ChangeLog (161860 => 161861)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/ChangeLog        2014-01-13 06:18:14 UTC (rev 161860)
+++ trunk/Source/WTF/ChangeLog        2014-01-13 06:26:50 UTC (rev 161861)
</span><span class="lines">@@ -1,3 +1,17 @@
</span><ins>+2014-01-12 Commit Queue <commit-queue@webkit.org>
+
+ Unreviewed, rolling out r161840.
+ http://trac.webkit.org/changeset/161840
+ https://bugs.webkit.org/show_bug.cgi?id=126870
+
+ Caused jsscore and layout test failures (Requested by smfr on
+ #webkit).
+
+ * wtf/text/StringImpl.cpp:
+ (WTF::StringImpl::replace):
+ * wtf/text/WTFString.h:
+ (WTF::String::isAllSpecialCharacters):
+
</ins><span class="cx"> 2014-01-12 Dan Bernstein <mitz@apple.com>
</span><span class="cx">
</span><span class="cx"> Fix an assertion failure in initializeDates() when launching Safari, which was introduced in r161852.
</span></span></pre></div>
<a id="trunkSourceWTFwtftextStringImplcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/wtf/text/StringImpl.cpp (161860 => 161861)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/wtf/text/StringImpl.cpp        2014-01-13 06:18:14 UTC (rev 161860)
+++ trunk/Source/WTF/wtf/text/StringImpl.cpp        2014-01-13 06:26:50 UTC (rev 161861)
</span><span class="lines">@@ -1489,7 +1489,7 @@
</span><span class="cx"> for (unsigned i = 0; i < length() - position - lengthToReplace; ++i)
</span><span class="cx"> data[i + position + lengthToInsert] = m_data8[i + position + lengthToReplace];
</span><span class="cx"> } else {
</span><del>- memcpy(data + position + lengthToInsert, characters16() + position + lengthToReplace,
</del><ins>+ memcpy(data + position + lengthToInsert, characters() + position + lengthToReplace,
</ins><span class="cx"> (length() - position - lengthToReplace) * sizeof(UChar));
</span><span class="cx"> }
</span><span class="cx"> return newImpl;
</span></span></pre></div>
<a id="trunkSourceWTFwtftextWTFStringh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/wtf/text/WTFString.h (161860 => 161861)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/wtf/text/WTFString.h        2014-01-13 06:18:14 UTC (rev 161860)
+++ trunk/Source/WTF/wtf/text/WTFString.h        2014-01-13 06:26:50 UTC (rev 161861)
</span><span class="lines">@@ -625,14 +625,14 @@
</span><span class="cx"> template<bool isSpecialCharacter(UChar)>
</span><span class="cx"> inline bool String::isAllSpecialCharacters() const
</span><span class="cx"> {
</span><del>- size_t length = this->length();
</del><ins>+ size_t len = length();
</ins><span class="cx">
</span><del>- if (!length)
</del><ins>+ if (!len)
</ins><span class="cx"> return true;
</span><span class="cx">
</span><span class="cx"> if (is8Bit())
</span><del>- return WTF::isAllSpecialCharacters<isSpecialCharacter>(characters8(), length);
- return WTF::isAllSpecialCharacters<isSpecialCharacter>(characters16(), length);
</del><ins>+ return WTF::isAllSpecialCharacters<isSpecialCharacter, LChar>(characters8(), len);
+ return WTF::isAllSpecialCharacters<isSpecialCharacter, UChar>(characters(), len);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> // StringHash is the default hash for String
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (161860 => 161861)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2014-01-13 06:18:14 UTC (rev 161860)
+++ trunk/Source/WebCore/ChangeLog        2014-01-13 06:26:50 UTC (rev 161861)
</span><span class="lines">@@ -1,3 +1,52 @@
</span><ins>+2014-01-12 Commit Queue <commit-queue@webkit.org>
+
+ Unreviewed, rolling out r161840.
+ http://trac.webkit.org/changeset/161840
+ https://bugs.webkit.org/show_bug.cgi?id=126870
+
+ Caused jsscore and layout test failures (Requested by smfr on
+ #webkit).
+
+ * bindings/objc/WebScriptObject.mm:
+ (+[WebScriptObject _convertValueToObjcValue:JSC::originRootObject:rootObject:]):
+ * editing/CompositeEditCommand.cpp:
+ (WebCore::containsOnlyWhitespace):
+ * editing/TypingCommand.cpp:
+ (WebCore::TypingCommand::insertText):
+ * editing/VisibleUnits.cpp:
+ (WebCore::startOfParagraph):
+ (WebCore::endOfParagraph):
+ * html/parser/HTMLParserIdioms.cpp:
+ (WebCore::stripLeadingAndTrailingHTMLSpaces):
+ (WebCore::parseHTMLNonNegativeInteger):
+ * inspector/ContentSearchUtils.cpp:
+ (WebCore::ContentSearchUtils::createSearchRegexSource):
+ * inspector/InspectorStyleSheet.cpp:
+ (WebCore::InspectorStyle::newLineAndWhitespaceDelimiters):
+ * inspector/InspectorStyleTextEditor.cpp:
+ (WebCore::InspectorStyleTextEditor::insertProperty):
+ (WebCore::InspectorStyleTextEditor::internalReplaceProperty):
+ * platform/Length.cpp:
+ (WebCore::newCoordsArray):
+ * platform/LinkHash.cpp:
+ (WebCore::visitedLinkHash):
+ * platform/graphics/Color.cpp:
+ (WebCore::Color::parseHexColor):
+ (WebCore::Color::Color):
+ * platform/graphics/TextRun.h:
+ (WebCore::TextRun::TextRun):
+ * platform/text/TextEncodingRegistry.cpp:
+ (WebCore::atomicCanonicalTextEncodingName):
+ * rendering/RenderBlock.cpp:
+ (WebCore::RenderBlock::constructTextRun):
+ * rendering/RenderCombineText.cpp:
+ (WebCore::RenderCombineText::width):
+ * svg/SVGFontElement.cpp:
+ (WebCore::SVGFontElement::registerLigaturesInGlyphCache):
+ * xml/XPathFunctions.cpp:
+ (WebCore::XPath::FunId::evaluate):
+ * xml/XPathNodeSet.h:
+
</ins><span class="cx"> 2014-01-12 Jinwoo Song <jinwoo7.song@samsung.com>
</span><span class="cx">
</span><span class="cx"> Fix build warnings by unused parameter
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsobjcWebScriptObjectmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/objc/WebScriptObject.mm (161860 => 161861)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/objc/WebScriptObject.mm        2014-01-13 06:18:14 UTC (rev 161860)
+++ trunk/Source/WebCore/bindings/objc/WebScriptObject.mm        2014-01-13 06:26:50 UTC (rev 161861)
</span><span class="lines">@@ -548,8 +548,11 @@
</span><span class="cx"> return [WebScriptObject scriptObjectForJSObject:toRef(object) originRootObject:originRootObject rootObject:rootObject];
</span><span class="cx"> }
</span><span class="cx">
</span><del>- if (value.isString())
- return asString(value)->value(rootObject->globalObject()->globalExec());
</del><ins>+ if (value.isString()) {
+ ExecState* exec = rootObject->globalObject()->globalExec();
+ const String& u = asString(value)->value(exec);
+ return [NSString stringWithCharacters:u.characters() length:u.length()];
+ }
</ins><span class="cx">
</span><span class="cx"> if (value.isNumber())
</span><span class="cx"> return [NSNumber numberWithDouble:value.asNumber()];
</span></span></pre></div>
<a id="trunkSourceWebCoreeditingCompositeEditCommandcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/editing/CompositeEditCommand.cpp (161860 => 161861)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/editing/CompositeEditCommand.cpp        2014-01-13 06:18:14 UTC (rev 161860)
+++ trunk/Source/WebCore/editing/CompositeEditCommand.cpp        2014-01-13 06:26:50 UTC (rev 161861)
</span><span class="lines">@@ -667,9 +667,10 @@
</span><span class="cx"> static inline bool containsOnlyWhitespace(const String& text)
</span><span class="cx"> {
</span><span class="cx"> for (unsigned i = 0; i < text.length(); ++i) {
</span><del>- if (!isWhitespace(text[i]))
</del><ins>+ if (!isWhitespace(text.characters()[i]))
</ins><span class="cx"> return false;
</span><span class="cx"> }
</span><ins>+
</ins><span class="cx"> return true;
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCoreeditingTypingCommandcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/editing/TypingCommand.cpp (161860 => 161861)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/editing/TypingCommand.cpp        2014-01-13 06:18:14 UTC (rev 161860)
+++ trunk/Source/WebCore/editing/TypingCommand.cpp        2014-01-13 06:26:50 UTC (rev 161861)
</span><span class="lines">@@ -152,7 +152,7 @@
</span><span class="cx"> ASSERT(frame);
</span><span class="cx">
</span><span class="cx"> if (!text.isEmpty())
</span><del>- frame->editor().updateMarkersForWordsAffectedByEditing(isSpaceOrNewline(text[0]));
</del><ins>+ frame->editor().updateMarkersForWordsAffectedByEditing(isSpaceOrNewline(text.characters()[0]));
</ins><span class="cx">
</span><span class="cx"> insertText(document, text, frame->selection().selection(), options, composition);
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCoreeditingVisibleUnitscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/editing/VisibleUnits.cpp (161860 => 161861)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/editing/VisibleUnits.cpp        2014-01-13 06:18:14 UTC (rev 161860)
+++ trunk/Source/WebCore/editing/VisibleUnits.cpp        2014-01-13 06:26:50 UTC (rev 161861)
</span><span class="lines">@@ -1146,10 +1146,15 @@
</span><span class="cx"> ASSERT_WITH_SECURITY_IMPLICATION(n->isTextNode());
</span><span class="cx"> type = Position::PositionIsOffsetInAnchor;
</span><span class="cx"> if (style.preserveNewline()) {
</span><del>- unsigned startOffset = n == startNode ? std::max(0, offset) : std::numeric_limits<unsigned>::max();
- size_t newlineOffset = toRenderText(r)->text()->reverseFind('\n', startOffset);
- if (newlineOffset != notFound)
- return VisiblePosition(Position(toText(n), newlineOffset + 1), DOWNSTREAM);
</del><ins>+ const UChar* chars = toRenderText(r)->characters();
+ int i = toRenderText(r)->textLength();
+ int o = offset;
+ if (n == startNode && o < i)
+ i = std::max(0, o);
+ while (--i >= 0) {
+ if (chars[i] == '\n')
+ return VisiblePosition(Position(toText(n), i + 1), DOWNSTREAM);
+ }
</ins><span class="cx"> }
</span><span class="cx"> node = n;
</span><span class="cx"> offset = 0;
</span><span class="lines">@@ -1221,11 +1226,15 @@
</span><span class="cx"> // FIXME: We avoid returning a position where the renderer can't accept the caret.
</span><span class="cx"> if (r->isText() && toRenderText(r)->hasRenderedText()) {
</span><span class="cx"> ASSERT_WITH_SECURITY_IMPLICATION(n->isTextNode());
</span><ins>+ int length = toRenderText(r)->textLength();
</ins><span class="cx"> type = Position::PositionIsOffsetInAnchor;
</span><span class="cx"> if (style.preserveNewline()) {
</span><del>- size_t newlineOffset = toRenderText(r)->text()->find('\n', n == startNode ? offset : 0);
- if (newlineOffset != notFound)
- return VisiblePosition(Position(toText(n), newlineOffset), DOWNSTREAM);
</del><ins>+ const UChar* chars = toRenderText(r)->characters();
+ int o = n == startNode ? offset : 0;
+ for (int i = o; i < length; ++i) {
+ if (chars[i] == '\n')
+ return VisiblePosition(Position(toText(n), i), DOWNSTREAM);
+ }
</ins><span class="cx"> }
</span><span class="cx"> node = n;
</span><span class="cx"> offset = r->caretMaxOffset();
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlparserHTMLParserIdiomscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/parser/HTMLParserIdioms.cpp (161860 => 161861)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/parser/HTMLParserIdioms.cpp        2014-01-13 06:18:14 UTC (rev 161860)
+++ trunk/Source/WebCore/html/parser/HTMLParserIdioms.cpp        2014-01-13 06:26:50 UTC (rev 161861)
</span><span class="lines">@@ -71,7 +71,7 @@
</span><span class="cx"> if (string.is8Bit())
</span><span class="cx"> return stripLeadingAndTrailingHTMLSpaces(string, string.characters8(), length);
</span><span class="cx">
</span><del>- return stripLeadingAndTrailingHTMLSpaces(string, string.characters16(), length);
</del><ins>+ return stripLeadingAndTrailingHTMLSpaces(string, string.characters(), length);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> String serializeForNumberType(const Decimal& number)
</span><span class="lines">@@ -267,12 +267,12 @@
</span><span class="cx"> // Step 1
</span><span class="cx"> // Step 2
</span><span class="cx"> unsigned length = input.length();
</span><del>- if (input.isNull() || input.is8Bit()) {
</del><ins>+ if (length && input.is8Bit()) {
</ins><span class="cx"> const LChar* start = input.characters8();
</span><span class="cx"> return parseHTMLNonNegativeIntegerInternal(start, start + length, value);
</span><span class="cx"> }
</span><span class="cx">
</span><del>- const UChar* start = input.characters16();
</del><ins>+ const UChar* start = input.characters();
</ins><span class="cx"> return parseHTMLNonNegativeIntegerInternal(start, start + length, value);
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCoreinspectorContentSearchUtilscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/inspector/ContentSearchUtils.cpp (161860 => 161861)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/inspector/ContentSearchUtils.cpp        2014-01-13 06:18:14 UTC (rev 161860)
+++ trunk/Source/WebCore/inspector/ContentSearchUtils.cpp        2014-01-13 06:26:50 UTC (rev 161861)
</span><span class="lines">@@ -36,7 +36,6 @@
</span><span class="cx"> #include <inspector/InspectorValues.h>
</span><span class="cx"> #include <wtf/BumpPointerAllocator.h>
</span><span class="cx"> #include <wtf/StdLibExtras.h>
</span><del>-#include <wtf/text/StringBuilder.h>
</del><span class="cx"> #include <yarr/Yarr.h>
</span><span class="cx">
</span><span class="cx"> using namespace Inspector;
</span><span class="lines">@@ -51,13 +50,17 @@
</span><span class="cx">
</span><span class="cx"> static String createSearchRegexSource(const String& text)
</span><span class="cx"> {
</span><del>- StringBuilder result;
</del><ins>+ String result;
+ const UChar* characters = text.characters();
+ String specials(regexSpecialCharacters);
+
</ins><span class="cx"> for (unsigned i = 0; i < text.length(); i++) {
</span><del>- if (isASCII(text[i]) && strchr(regexSpecialCharacters, text[i]))
- result.append('\\');
- result.append(text[i]);
</del><ins>+ if (specials.find(characters[i]) != notFound)
+ result.append("\\");
+ result.append(characters[i]);
</ins><span class="cx"> }
</span><del>- return result.toString();
</del><ins>+
+ return result;
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> static inline size_t sizetExtractor(const size_t* value)
</span></span></pre></div>
<a id="trunkSourceWebCoreinspectorInspectorStyleSheetcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/inspector/InspectorStyleSheet.cpp (161860 => 161861)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/inspector/InspectorStyleSheet.cpp        2014-01-13 06:18:14 UTC (rev 161860)
+++ trunk/Source/WebCore/inspector/InspectorStyleSheet.cpp        2014-01-13 06:26:50 UTC (rev 161861)
</span><span class="lines">@@ -723,13 +723,14 @@
</span><span class="cx"> int propertyIndex = 0;
</span><span class="cx"> bool isFullPrefixScanned = false;
</span><span class="cx"> bool lineFeedTerminated = false;
</span><ins>+ const UChar* characters = text.characters();
</ins><span class="cx"> while (propertyIndex < propertyCount) {
</span><span class="cx"> const WebCore::CSSPropertySourceData& currentProperty = sourcePropertyData->at(propertyIndex++);
</span><span class="cx">
</span><span class="cx"> bool processNextProperty = false;
</span><span class="cx"> int scanEnd = currentProperty.range.start;
</span><span class="cx"> for (int i = scanStart; i < scanEnd; ++i) {
</span><del>- UChar ch = text[i];
</del><ins>+ UChar ch = characters[i];
</ins><span class="cx"> bool isLineFeed = isHTMLLineBreak(ch);
</span><span class="cx"> if (isLineFeed) {
</span><span class="cx"> if (!lineFeedTerminated)
</span></span></pre></div>
<a id="trunkSourceWebCoreinspectorInspectorStyleTextEditorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/inspector/InspectorStyleTextEditor.cpp (161860 => 161861)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/inspector/InspectorStyleTextEditor.cpp        2014-01-13 06:18:14 UTC (rev 161860)
+++ trunk/Source/WebCore/inspector/InspectorStyleTextEditor.cpp        2014-01-13 06:26:50 UTC (rev 161861)
</span><span class="lines">@@ -82,10 +82,12 @@
</span><span class="cx"> if (insertLast && !insertFirstInSource) {
</span><span class="cx"> propertyStart = styleBodyLength;
</span><span class="cx"> if (propertyStart && textToSet.length()) {
</span><ins>+ const UChar* characters = m_styleText.characters();
+
</ins><span class="cx"> long curPos = propertyStart - 1; // The last position of style declaration, since propertyStart points past one.
</span><del>- while (curPos && isHTMLSpace(m_styleText[curPos]))
</del><ins>+ while (curPos && isHTMLSpace(characters[curPos]))
</ins><span class="cx"> --curPos;
</span><del>- if (curPos && m_styleText[curPos] != ';') {
</del><ins>+ if (curPos && characters[curPos] != ';') {
</ins><span class="cx"> // Prepend a ";" to the property text if appending to a style declaration where
</span><span class="cx"> // the last property has no trailing ";".
</span><span class="cx"> textToSet.insert(";", 0);
</span><span class="lines">@@ -228,6 +230,7 @@
</span><span class="cx"> const SourceRange& range = property.sourceData.range;
</span><span class="cx"> long replaceRangeStart = range.start;
</span><span class="cx"> long replaceRangeEnd = range.end;
</span><ins>+ const UChar* characters = m_styleText.characters();
</ins><span class="cx"> long newTextLength = newText.length();
</span><span class="cx"> String finalNewText = newText;
</span><span class="cx">
</span><span class="lines">@@ -238,14 +241,14 @@
</span><span class="cx"> if (replaceRangeStart >= fullPrefixLength && m_styleText.substring(replaceRangeStart - fullPrefixLength, fullPrefixLength) == fullPrefix)
</span><span class="cx"> replaceRangeStart -= fullPrefixLength;
</span><span class="cx"> } else if (newTextLength) {
</span><del>- if (isHTMLLineBreak(newText[newTextLength - 1])) {
</del><ins>+ if (isHTMLLineBreak(newText.characters()[newTextLength - 1])) {
</ins><span class="cx"> // Coalesce newlines of the original and new property values (to avoid a lot of blank lines while incrementally applying property values).
</span><span class="cx"> bool foundNewline = false;
</span><span class="cx"> bool isLastNewline = false;
</span><span class="cx"> int i;
</span><span class="cx"> int textLength = m_styleText.length();
</span><del>- for (i = replaceRangeEnd; i < textLength && isSpaceOrNewline(m_styleText[i]); ++i) {
- isLastNewline = isHTMLLineBreak(m_styleText[i]);
</del><ins>+ for (i = replaceRangeEnd; i < textLength && isSpaceOrNewline(characters[i]); ++i) {
+ isLastNewline = isHTMLLineBreak(characters[i]);
</ins><span class="cx"> if (isLastNewline)
</span><span class="cx"> foundNewline = true;
</span><span class="cx"> else if (foundNewline && !isLastNewline) {
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformLengthcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/Length.cpp (161860 => 161861)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/Length.cpp        2014-01-13 06:18:14 UTC (rev 161860)
+++ trunk/Source/WebCore/platform/Length.cpp        2014-01-13 06:26:50 UTC (rev 161861)
</span><span class="lines">@@ -88,9 +88,10 @@
</span><span class="cx"> std::unique_ptr<Length[]> newCoordsArray(const String& string, int& len)
</span><span class="cx"> {
</span><span class="cx"> unsigned length = string.length();
</span><ins>+ const UChar* data = string.characters();
</ins><span class="cx"> StringBuffer<UChar> spacified(length);
</span><span class="cx"> for (unsigned i = 0; i < length; i++) {
</span><del>- UChar cc = string[i];
</del><ins>+ UChar cc = data[i];
</ins><span class="cx"> if (cc > '9' || (cc < '0' && cc != '-' && cc != '*' && cc != '.'))
</span><span class="cx"> spacified[i] = ' ';
</span><span class="cx"> else
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformLinkHashcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/LinkHash.cpp (161860 => 161861)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/LinkHash.cpp        2014-01-13 06:18:14 UTC (rev 161860)
+++ trunk/Source/WebCore/platform/LinkHash.cpp        2014-01-13 06:26:50 UTC (rev 161861)
</span><span class="lines">@@ -214,9 +214,10 @@
</span><span class="cx"> LinkHash visitedLinkHash(const String& url)
</span><span class="cx"> {
</span><span class="cx"> unsigned length = url.length();
</span><del>- if (url.isNull() || url.is8Bit())
</del><ins>+
+ if (length && url.is8Bit())
</ins><span class="cx"> return visitedLinkHashInline(url.characters8(), length);
</span><del>- return visitedLinkHashInline(url.characters16(), length);
</del><ins>+ return visitedLinkHashInline(url.characters(), length);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> LinkHash visitedLinkHash(const UChar* url, unsigned length)
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsColorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/Color.cpp (161860 => 161861)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/Color.cpp        2014-01-13 06:18:14 UTC (rev 161860)
+++ trunk/Source/WebCore/platform/graphics/Color.cpp        2014-01-13 06:26:50 UTC (rev 161861)
</span><span class="lines">@@ -165,7 +165,7 @@
</span><span class="cx"> return false;
</span><span class="cx"> if (name.is8Bit())
</span><span class="cx"> return parseHexColor(name.characters8(), name.length(), rgb);
</span><del>- return parseHexColor(name.characters16(), name.length(), rgb);
</del><ins>+ return parseHexColor(name.characters(), name.length(), rgb);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> int differenceSquared(const Color& c1, const Color& c2)
</span><span class="lines">@@ -182,7 +182,7 @@
</span><span class="cx"> if (name.is8Bit())
</span><span class="cx"> m_valid = parseHexColor(name.characters8() + 1, name.length() - 1, m_color);
</span><span class="cx"> else
</span><del>- m_valid = parseHexColor(name.characters16() + 1, name.length() - 1, m_color);
</del><ins>+ m_valid = parseHexColor(name.characters() + 1, name.length() - 1, m_color);
</ins><span class="cx"> } else
</span><span class="cx"> setNamedColor(name);
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsTextRunh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/TextRun.h (161860 => 161861)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/TextRun.h        2014-01-13 06:18:14 UTC (rev 161860)
+++ trunk/Source/WebCore/platform/graphics/TextRun.h        2014-01-13 06:26:50 UTC (rev 161861)
</span><span class="lines">@@ -124,11 +124,11 @@
</span><span class="cx"> , m_tabSize(0)
</span><span class="cx"> {
</span><span class="cx"> #if ENABLE(8BIT_TEXTRUN)
</span><del>- if (s.isNull() || s.is8Bit()) {
</del><ins>+ if (m_charactersLength && s.is8Bit()) {
</ins><span class="cx"> m_data.characters8 = s.characters8();
</span><span class="cx"> m_is8Bit = true;
</span><span class="cx"> } else {
</span><del>- m_data.characters16 = s.characters16();
</del><ins>+ m_data.characters16 = s.characters();
</ins><span class="cx"> m_is8Bit = false;
</span><span class="cx"> }
</span><span class="cx"> #else
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformtextTextEncodingRegistrycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/text/TextEncodingRegistry.cpp (161860 => 161861)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/text/TextEncodingRegistry.cpp        2014-01-13 06:18:14 UTC (rev 161860)
+++ trunk/Source/WebCore/platform/text/TextEncodingRegistry.cpp        2014-01-13 06:26:50 UTC (rev 161861)
</span><span class="lines">@@ -347,13 +347,13 @@
</span><span class="cx">
</span><span class="cx"> const char* atomicCanonicalTextEncodingName(const String& alias)
</span><span class="cx"> {
</span><del>- if (alias.isEmpty())
- return nullptr;
</del><ins>+ if (!alias.length())
+ return 0;
</ins><span class="cx">
</span><span class="cx"> if (alias.is8Bit())
</span><span class="cx"> return atomicCanonicalTextEncodingName<LChar>(alias.characters8(), alias.length());
</span><span class="cx">
</span><del>- return atomicCanonicalTextEncodingName<UChar>(alias.characters16(), alias.length());
</del><ins>+ return atomicCanonicalTextEncodingName<UChar>(alias.characters(), alias.length());
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> bool noExtendedTextEncodingNameUsed()
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderBlockcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderBlock.cpp (161860 => 161861)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderBlock.cpp        2014-01-13 06:18:14 UTC (rev 161860)
+++ trunk/Source/WebCore/rendering/RenderBlock.cpp        2014-01-13 06:26:50 UTC (rev 161861)
</span><span class="lines">@@ -5479,10 +5479,11 @@
</span><span class="cx"> TextRun RenderBlock::constructTextRun(RenderObject* context, const Font& font, const String& string, const RenderStyle& style, TextRun::ExpansionBehavior expansion, TextRunFlags flags)
</span><span class="cx"> {
</span><span class="cx"> unsigned length = string.length();
</span><ins>+
</ins><span class="cx"> #if ENABLE(8BIT_TEXTRUN)
</span><del>- if (string.isNull() || string.is8Bit())
</del><ins>+ if (length && string.is8Bit())
</ins><span class="cx"> return constructTextRunInternal(context, font, string.characters8(), length, style, expansion, flags);
</span><del>- return constructTextRunInternal(context, font, string.characters16(), length, style, expansion, flags);
</del><ins>+ return constructTextRunInternal(context, font, string.characters(), length, style, expansion, flags);
</ins><span class="cx"> #else
</span><span class="cx"> return constructTextRunInternal(context, font, string.deprecatedCharacters(), length, style, expansion, flags);
</span><span class="cx"> #endif
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderCombineTextcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderCombineText.cpp (161860 => 161861)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderCombineText.cpp        2014-01-13 06:18:14 UTC (rev 161860)
+++ trunk/Source/WebCore/rendering/RenderCombineText.cpp        2014-01-13 06:26:50 UTC (rev 161861)
</span><span class="lines">@@ -60,7 +60,7 @@
</span><span class="cx">
</span><span class="cx"> float RenderCombineText::width(unsigned from, unsigned length, const Font& font, float xPosition, HashSet<const SimpleFontData*>* fallbackFonts, GlyphOverflow* glyphOverflow) const
</span><span class="cx"> {
</span><del>- if (!textLength())
</del><ins>+ if (!characters())
</ins><span class="cx"> return 0;
</span><span class="cx">
</span><span class="cx"> if (m_isCombined)
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGFontElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGFontElement.cpp (161860 => 161861)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGFontElement.cpp        2014-01-13 06:18:14 UTC (rev 161860)
+++ trunk/Source/WebCore/svg/SVGFontElement.cpp        2014-01-13 06:26:50 UTC (rev 161861)
</span><span class="lines">@@ -87,13 +87,16 @@
</span><span class="cx"> // will not be able to find a glyph for "f", but handles the fallback
</span><span class="cx"> // character substitution properly through glyphDataForCharacter().
</span><span class="cx"> Vector<SVGGlyph> glyphs;
</span><del>- for (auto& ligature : ligatures) {
- unsigned ligatureLength = ligature.length();
- ASSERT(ligatureLength > 1);
</del><ins>+ size_t ligaturesSize = ligatures.size();
+ for (size_t i = 0; i < ligaturesSize; ++i) {
+ const String& unicode = ligatures[i];
</ins><span class="cx">
</span><del>- for (unsigned i = 0; i < ligatureLength; ++i) {
- // FIXME: Is there a faster way to do this without allocating/deallocating a string for every character in every ligature?
- String lookupString(ligature.substring(i, 1));
</del><ins>+ unsigned unicodeLength = unicode.length();
+ ASSERT(unicodeLength > 1);
+
+ const UChar* characters = unicode.characters();
+ for (unsigned i = 0; i < unicodeLength; ++i) {
+ String lookupString(characters + i, 1);
</ins><span class="cx"> m_glyphMap.collectGlyphsForString(lookupString, glyphs);
</span><span class="cx"> if (!glyphs.isEmpty()) {
</span><span class="cx"> glyphs.clear();
</span></span></pre></div>
<a id="trunkSourceWebCorexmlXPathFunctionscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/xml/XPathFunctions.cpp (161860 => 161861)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/xml/XPathFunctions.cpp        2014-01-13 06:18:14 UTC (rev 161860)
+++ trunk/Source/WebCore/xml/XPathFunctions.cpp        2014-01-13 06:26:50 UTC (rev 161861)
</span><span class="lines">@@ -307,17 +307,18 @@
</span><span class="cx"> Value FunId::evaluate() const
</span><span class="cx"> {
</span><span class="cx"> Value a = argument(0).evaluate();
</span><ins>+ StringBuilder idList; // A whitespace-separated list of IDs
</ins><span class="cx">
</span><del>- String idList; // A whitespace-separated list of IDs
</del><span class="cx"> if (a.isNodeSet()) {
</span><del>- StringBuilder spaceSeparatedList;
- for (auto& node : a.toNodeSet()) {
- spaceSeparatedList.append(stringValue(node.get()));
- spaceSeparatedList.append(' ');
</del><ins>+ const NodeSet& nodes = a.toNodeSet();
+ for (size_t i = 0; i < nodes.size(); ++i) {
+ String str = stringValue(nodes[i]);
+ idList.append(str);
+ idList.append(' ');
</ins><span class="cx"> }
</span><del>- idList = spaceSeparatedList.toString();
</del><span class="cx"> } else {
</span><del>- idList = a.toString();
</del><ins>+ String str = a.toString();
+ idList.append(str);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> TreeScope& contextScope = evaluationContext().node->treeScope();
</span><span class="lines">@@ -339,7 +340,7 @@
</span><span class="cx">
</span><span class="cx"> // If there are several nodes with the same id, id() should return the first one.
</span><span class="cx"> // In WebKit, getElementById behaves so, too, although its behavior in this case is formally undefined.
</span><del>- Node* node = contextScope.getElementById(idList.substring(startPos, endPos - startPos));
</del><ins>+ Node* node = contextScope.getElementById(String(idList.characters() + startPos, endPos - startPos));
</ins><span class="cx"> if (node && resultSet.add(node).isNewEntry)
</span><span class="cx"> result.append(node);
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCorexmlXPathNodeSeth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/xml/XPathNodeSet.h (161860 => 161861)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/xml/XPathNodeSet.h        2014-01-13 06:18:14 UTC (rev 161860)
+++ trunk/Source/WebCore/xml/XPathNodeSet.h        2014-01-13 06:26:50 UTC (rev 161861)
</span><span class="lines">@@ -44,9 +44,6 @@
</span><span class="cx"> void reserveCapacity(size_t newCapacity) { m_nodes.reserveCapacity(newCapacity); }
</span><span class="cx"> void clear() { m_nodes.clear(); }
</span><span class="cx">
</span><del>- Vector<RefPtr<Node>>::const_iterator begin() const { return m_nodes.begin(); }
- Vector<RefPtr<Node>>::const_iterator end() const { return m_nodes.end(); }
-
</del><span class="cx"> // NodeSet itself does not verify that nodes in it are unique.
</span><span class="cx"> void append(PassRefPtr<Node> node) { m_nodes.append(node); }
</span><span class="cx"> void append(const NodeSet& nodeSet) { m_nodes.appendVector(nodeSet.m_nodes); }
</span></span></pre>
</div>
</div>
</body>
</html>