Title: [187824] branches/safari-601.1-branch

Diff

Modified: branches/safari-601.1-branch/LayoutTests/ChangeLog (187823 => 187824)


--- branches/safari-601.1-branch/LayoutTests/ChangeLog	2015-08-04 07:01:48 UTC (rev 187823)
+++ branches/safari-601.1-branch/LayoutTests/ChangeLog	2015-08-04 07:01:52 UTC (rev 187824)
@@ -1,5 +1,20 @@
 2015-08-03  Matthew Hanson  <matthew_han...@apple.com>
 
+        Merge r187685. rdar://problem/21775336
+
+    2015-07-31  Myles C. Maxfield  <mmaxfi...@apple.com>
+
+            [SVG -> OTF Converter] Crash when converting Arabic fonts
+            https://bugs.webkit.org/show_bug.cgi?id=147510
+
+            Reviewed by Anders Carlsson.
+
+            * fast/text/arabic-duplicate-glyph-font-expected.txt: Added.
+            * fast/text/arabic-duplicate-glyph-font.html: Added.
+            * fast/text/resources/arabic-duplicate-glyph-font.svg: Added.
+
+2015-08-03  Matthew Hanson  <matthew_han...@apple.com>
+
         Merge r187778. rdar://problem/22098457
 
     2015-08-03  Brady Eidson  <beid...@apple.com>

Added: branches/safari-601.1-branch/LayoutTests/fast/text/arabic-duplicate-glyph-font-expected.txt (0 => 187824)


--- branches/safari-601.1-branch/LayoutTests/fast/text/arabic-duplicate-glyph-font-expected.txt	                        (rev 0)
+++ branches/safari-601.1-branch/LayoutTests/fast/text/arabic-duplicate-glyph-font-expected.txt	2015-08-04 07:01:52 UTC (rev 187824)
@@ -0,0 +1,2 @@
+This test makes sure that SVGToOTFFontConverter::compareCodepointsLexicographically() is transitive. The test passes if there is no crash.
+ﻟﻠﻪ

Added: branches/safari-601.1-branch/LayoutTests/fast/text/arabic-duplicate-glyph-font.html (0 => 187824)


--- branches/safari-601.1-branch/LayoutTests/fast/text/arabic-duplicate-glyph-font.html	                        (rev 0)
+++ branches/safari-601.1-branch/LayoutTests/fast/text/arabic-duplicate-glyph-font.html	2015-08-04 07:01:52 UTC (rev 187824)
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html>
+<head>
+<style>
+@font-face {
+    font-family: "arabicfont";
+    src: url("resources/arabic-duplicate-glyph-font.svg") format("svg");
+}
+</style>
+<script>
+if (window.testRunner)
+    testRunner.dumpAsText();
+</script>
+</head>
+<body>
+This test makes sure that SVGToOTFFontConverter::compareCodepointsLexicographically() is transitive. The test passes if there is no crash.
+<div style="font-family: arabicfont;">&#xfedf;&#xfee0;&#xfeea;</div>
+</body>
+</html>

Added: branches/safari-601.1-branch/LayoutTests/fast/text/resources/arabic-duplicate-glyph-font.svg (0 => 187824)


--- branches/safari-601.1-branch/LayoutTests/fast/text/resources/arabic-duplicate-glyph-font.svg	                        (rev 0)
+++ branches/safari-601.1-branch/LayoutTests/fast/text/resources/arabic-duplicate-glyph-font.svg	2015-08-04 07:01:52 UTC (rev 187824)
@@ -0,0 +1,90 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg xmlns="http://www.w3.org/2000/svg">
+<defs>
+<font horiz-adv-x='1024' >
+  <font-face 
+    font-family="Font"
+    font-weight="300"
+    font-stretch="normal"
+    units-per-em="2048"
+    ascent="1374"
+    descent="-674"
+    x-height="680"
+    cap-height="956"
+    bbox="-127 -672 1872 1855"
+    underline-thickness="66"
+    underline-position="-147"
+    unicode-range="U+0020-FEFC"
+  />
+<missing-glyph horiz-adv-x="2048" d="M0 0" />
+    <glyph unicode="&#xfedf;&#xfee0;&#xfeea;" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+    <glyph unicode="&#xfedf;&#xfee0;&#xfeea;" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+    <glyph unicode="&#xfedf;&#xfee0;&#xfeea;" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+    <glyph unicode="&#xfedf;&#xfee0;&#xfeea;" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+    <glyph unicode="&#xfedf;&#xfee0;&#xfeea;" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+    <glyph unicode="&#xfedf;&#xfee0;&#xfeea;" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+    <glyph unicode="&#xfedf;&#xfee0;&#xfeea;" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+    <glyph unicode="&#xfedf;&#xfee0;&#xfeea;" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+    <glyph unicode="&#xfedf;&#xfee0;&#xfeea;" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+    <glyph unicode="&#xfedf;&#xfee0;&#xfeea;" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+    <glyph unicode="&#xfedf;&#xfee0;&#xfeea;" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+    <glyph unicode="&#xfedf;&#xfee0;&#xfeea;" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+    <glyph unicode="&#xfedf;&#xfee0;&#xfeea;" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+    <glyph unicode="&#xfedf;&#xfee0;&#xfeea;" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+    <glyph unicode="&#xfedf;&#xfee0;&#xfeea;" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+    <glyph unicode="&#xfedf;&#xfee0;&#xfeea;" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+    <glyph unicode="&#xfedf;&#xfee0;&#xfeea;" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+    <glyph unicode="&#xfedf;&#xfee0;&#xfeea;" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+    <glyph unicode="&#xfedf;&#xfee0;&#xfeea;" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+    <glyph unicode="&#xfedf;&#xfee0;&#xfeea;" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+    <glyph unicode="&#xfedf;&#xfee0;&#xfeea;" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+    <glyph unicode="&#xfedf;&#xfee0;&#xfeea;" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+    <glyph unicode="&#xfedf;&#xfee0;&#xfeea;" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+    <glyph unicode="&#xfedf;&#xfee0;&#xfeea;" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+    <glyph unicode="&#xfedf;&#xfee0;&#xfeea;" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+    <glyph unicode="&#xfedf;&#xfee0;&#xfeea;" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+    <glyph unicode="&#xfedf;&#xfee0;&#xfeea;" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+    <glyph unicode="&#xfedf;&#xfee0;&#xfeea;" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+    <glyph unicode="&#xfedf;&#xfee0;&#xfeea;" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+    <glyph unicode="&#xfedf;&#xfee0;&#xfeea;" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+    <glyph unicode="&#xfedf;&#xfee0;&#xfeea;" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+    <glyph unicode="&#xfedf;&#xfee0;&#xfeea;" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+    <glyph unicode="&#xfedf;&#xfee0;&#xfeea;" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+    <glyph unicode="&#xfedf;&#xfee0;&#xfeea;" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+    <glyph unicode="&#xfedf;&#xfee0;&#xfeea;" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+    <glyph unicode="&#xfedf;&#xfee0;&#xfeea;" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+    <glyph unicode="&#xfedf;&#xfee0;&#xfeea;" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+    <glyph unicode="&#xfedf;&#xfee0;&#xfeea;" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+    <glyph unicode="&#xfedf;&#xfee0;&#xfeea;" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+    <glyph unicode="&#xfedf;&#xfee0;&#xfeea;" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+    <glyph unicode="&#xfedf;&#xfee0;&#xfeea;" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+    <glyph unicode="&#xfedf;&#xfee0;&#xfeea;" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+    <glyph unicode="&#xfedf;&#xfee0;&#xfeea;" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+    <glyph unicode="&#xfedf;&#xfee0;&#xfeea;" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+    <glyph unicode="&#xfedf;&#xfee0;&#xfeea;" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+    <glyph unicode="&#xfedf;&#xfee0;&#xfeea;" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+    <glyph unicode="&#xfedf;&#xfee0;&#xfeea;" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+    <glyph unicode="&#xfedf;&#xfee0;&#xfeea;" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+    <glyph unicode="&#xfedf;&#xfee0;&#xfeea;" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+    <glyph unicode="&#xfedf;&#xfee0;&#xfeea;" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+    <glyph unicode="&#xfedf;&#xfee0;&#xfeea;" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+    <glyph unicode="&#xfedf;&#xfee0;&#xfeea;" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+    <glyph unicode="&#xfedf;&#xfee0;&#xfeea;" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+    <glyph unicode="&#xfedf;&#xfee0;&#xfeea;" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+    <glyph unicode="&#xfedf;&#xfee0;&#xfeea;" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+    <glyph unicode="&#xfedf;&#xfee0;&#xfeea;" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+    <glyph unicode="&#xfedf;&#xfee0;&#xfeea;" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+    <glyph unicode="&#xfedf;&#xfee0;&#xfeea;" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+    <glyph unicode="&#xfedf;&#xfee0;&#xfeea;" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+    <glyph unicode="&#xfedf;&#xfee0;&#xfeea;" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+    <glyph unicode="&#xfedf;&#xfee0;&#xfeea;" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+    <glyph unicode="&#xfedf;&#xfee0;&#xfeea;" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+    <glyph unicode="&#xfedf;&#xfee0;&#xfeea;" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+    <glyph unicode="&#xfedf;&#xfee0;&#xfeea;" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+    <glyph unicode="&#xfedf;&#xfee0;&#xfeea;" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+    <glyph unicode="&#xfedf;&#xfee0;&#xfeea;" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+    <glyph unicode="&#xfedf;&#xfee0;&#xfeea;" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+    <glyph unicode="&#xfedf;&#xfee0;&#xfeea;" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+  </font>
+</defs></svg>

Modified: branches/safari-601.1-branch/Source/WebCore/ChangeLog (187823 => 187824)


--- branches/safari-601.1-branch/Source/WebCore/ChangeLog	2015-08-04 07:01:48 UTC (rev 187823)
+++ branches/safari-601.1-branch/Source/WebCore/ChangeLog	2015-08-04 07:01:52 UTC (rev 187824)
@@ -1,5 +1,23 @@
 2015-08-03  Matthew Hanson  <matthew_han...@apple.com>
 
+        Merge r187685. rdar://problem/21775336
+
+    2015-07-31  Myles C. Maxfield  <mmaxfi...@apple.com>
+
+            [SVG -> OTF Converter] Crash when converting Arabic fonts
+            https://bugs.webkit.org/show_bug.cgi?id=147510
+
+            Reviewed by Anders Carlsson.
+
+            SVGToOTFFontConverter::compareCodepointsLexicographically() wasn't transitive.
+
+            Test: fast/text/arabic-duplicate-glyph-font.html
+
+            * svg/SVGToOTFFontConversion.cpp:
+            (WebCore::SVGToOTFFontConverter::compareCodepointsLexicographically):
+
+2015-08-03  Matthew Hanson  <matthew_han...@apple.com>
+
         Merge r187545. rdar://problem/21893047
 
     2015-07-29  Dean Jackson  <d...@apple.com>

Modified: branches/safari-601.1-branch/Source/WebCore/svg/SVGToOTFFontConversion.cpp (187823 => 187824)


--- branches/safari-601.1-branch/Source/WebCore/svg/SVGToOTFFontConversion.cpp	2015-08-04 07:01:48 UTC (rev 187823)
+++ branches/safari-601.1-branch/Source/WebCore/svg/SVGToOTFFontConversion.cpp	2015-08-04 07:01:52 UTC (rev 187824)
@@ -1312,8 +1312,6 @@
     auto codePoints2 = StringView(data2.codepoints).codePoints();
     auto iterator1 = codePoints1.begin();
     auto iterator2 = codePoints2.begin();
-    unsigned length1 = data1.codepoints.length();
-    unsigned length2 = data2.codepoints.length();
     while (iterator1 != codePoints1.end() && iterator2 != codePoints2.end()) {
         UChar32 codepoint1, codepoint2;
         codepoint1 = *iterator1;
@@ -1328,10 +1326,12 @@
         ++iterator2;
     }
 
-    if (length1 == length2 && data1.glyphElement
-        && equalIgnoringCase(data1.glyphElement->fastGetAttribute(SVGNames::arabic_formAttr), "isolated"))
-        return true;
-    return length1 < length2;
+    if (iterator1 == codePoints1.end() && iterator2 == codePoints2.end()) {
+        bool firstIsIsolated = data1.glyphElement && equalIgnoringCase(data1.glyphElement->fastGetAttribute(SVGNames::arabic_formAttr), "isolated");
+        bool secondIsIsolated = data2.glyphElement && equalIgnoringCase(data2.glyphElement->fastGetAttribute(SVGNames::arabic_formAttr), "isolated");
+        return firstIsIsolated && !secondIsIsolated;
+    }
+    return iterator1 == codePoints1.end();
 }
 
 static void populateEmptyGlyphCharString(Vector<char, 17>& o, unsigned unitsPerEm)
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to