Title: [187685] trunk
- Revision
- 187685
- Author
- mmaxfi...@apple.com
- Date
- 2015-07-31 15:24:56 -0700 (Fri, 31 Jul 2015)
Log Message
[SVG -> OTF Converter] Crash when converting Arabic fonts
https://bugs.webkit.org/show_bug.cgi?id=147510
Reviewed by Anders Carlsson.
Source/WebCore:
SVGToOTFFontConverter::compareCodepointsLexicographically() wasn't transitive.
Test: fast/text/arabic-duplicate-glyph-font.html
* svg/SVGToOTFFontConversion.cpp:
(WebCore::SVGToOTFFontConverter::compareCodepointsLexicographically):
LayoutTests:
* 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.
Modified Paths
Added Paths
Diff
Modified: trunk/LayoutTests/ChangeLog (187684 => 187685)
--- trunk/LayoutTests/ChangeLog 2015-07-31 22:20:30 UTC (rev 187684)
+++ trunk/LayoutTests/ChangeLog 2015-07-31 22:24:56 UTC (rev 187685)
@@ -1,3 +1,14 @@
+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-07-31 Saam barati <saambara...@gmail.com>
ES6 class syntax should use block scoping
Added: trunk/LayoutTests/fast/text/arabic-duplicate-glyph-font-expected.txt (0 => 187685)
--- trunk/LayoutTests/fast/text/arabic-duplicate-glyph-font-expected.txt (rev 0)
+++ trunk/LayoutTests/fast/text/arabic-duplicate-glyph-font-expected.txt 2015-07-31 22:24:56 UTC (rev 187685)
@@ -0,0 +1,2 @@
+This test makes sure that SVGToOTFFontConverter::compareCodepointsLexicographically() is transitive. The test passes if there is no crash.
+ﻟﻠﻪ
Added: trunk/LayoutTests/fast/text/arabic-duplicate-glyph-font.html (0 => 187685)
--- trunk/LayoutTests/fast/text/arabic-duplicate-glyph-font.html (rev 0)
+++ trunk/LayoutTests/fast/text/arabic-duplicate-glyph-font.html 2015-07-31 22:24:56 UTC (rev 187685)
@@ -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;">ﻟﻠﻪ</div>
+</body>
+</html>
Added: trunk/LayoutTests/fast/text/resources/arabic-duplicate-glyph-font.svg (0 => 187685)
--- trunk/LayoutTests/fast/text/resources/arabic-duplicate-glyph-font.svg (rev 0)
+++ trunk/LayoutTests/fast/text/resources/arabic-duplicate-glyph-font.svg 2015-07-31 22:24:56 UTC (rev 187685)
@@ -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="ﻟﻠﻪ" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+ <glyph unicode="ﻟﻠﻪ" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+ <glyph unicode="ﻟﻠﻪ" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+ <glyph unicode="ﻟﻠﻪ" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+ <glyph unicode="ﻟﻠﻪ" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+ <glyph unicode="ﻟﻠﻪ" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+ <glyph unicode="ﻟﻠﻪ" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+ <glyph unicode="ﻟﻠﻪ" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+ <glyph unicode="ﻟﻠﻪ" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+ <glyph unicode="ﻟﻠﻪ" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+ <glyph unicode="ﻟﻠﻪ" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+ <glyph unicode="ﻟﻠﻪ" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+ <glyph unicode="ﻟﻠﻪ" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+ <glyph unicode="ﻟﻠﻪ" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+ <glyph unicode="ﻟﻠﻪ" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+ <glyph unicode="ﻟﻠﻪ" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+ <glyph unicode="ﻟﻠﻪ" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+ <glyph unicode="ﻟﻠﻪ" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+ <glyph unicode="ﻟﻠﻪ" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+ <glyph unicode="ﻟﻠﻪ" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+ <glyph unicode="ﻟﻠﻪ" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+ <glyph unicode="ﻟﻠﻪ" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+ <glyph unicode="ﻟﻠﻪ" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+ <glyph unicode="ﻟﻠﻪ" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+ <glyph unicode="ﻟﻠﻪ" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+ <glyph unicode="ﻟﻠﻪ" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+ <glyph unicode="ﻟﻠﻪ" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+ <glyph unicode="ﻟﻠﻪ" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+ <glyph unicode="ﻟﻠﻪ" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+ <glyph unicode="ﻟﻠﻪ" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+ <glyph unicode="ﻟﻠﻪ" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+ <glyph unicode="ﻟﻠﻪ" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+ <glyph unicode="ﻟﻠﻪ" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+ <glyph unicode="ﻟﻠﻪ" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+ <glyph unicode="ﻟﻠﻪ" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+ <glyph unicode="ﻟﻠﻪ" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+ <glyph unicode="ﻟﻠﻪ" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+ <glyph unicode="ﻟﻠﻪ" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+ <glyph unicode="ﻟﻠﻪ" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+ <glyph unicode="ﻟﻠﻪ" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+ <glyph unicode="ﻟﻠﻪ" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+ <glyph unicode="ﻟﻠﻪ" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+ <glyph unicode="ﻟﻠﻪ" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+ <glyph unicode="ﻟﻠﻪ" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+ <glyph unicode="ﻟﻠﻪ" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+ <glyph unicode="ﻟﻠﻪ" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+ <glyph unicode="ﻟﻠﻪ" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+ <glyph unicode="ﻟﻠﻪ" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+ <glyph unicode="ﻟﻠﻪ" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+ <glyph unicode="ﻟﻠﻪ" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+ <glyph unicode="ﻟﻠﻪ" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+ <glyph unicode="ﻟﻠﻪ" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+ <glyph unicode="ﻟﻠﻪ" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+ <glyph unicode="ﻟﻠﻪ" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+ <glyph unicode="ﻟﻠﻪ" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+ <glyph unicode="ﻟﻠﻪ" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+ <glyph unicode="ﻟﻠﻪ" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+ <glyph unicode="ﻟﻠﻪ" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+ <glyph unicode="ﻟﻠﻪ" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+ <glyph unicode="ﻟﻠﻪ" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+ <glyph unicode="ﻟﻠﻪ" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+ <glyph unicode="ﻟﻠﻪ" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+ <glyph unicode="ﻟﻠﻪ" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+ <glyph unicode="ﻟﻠﻪ" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+ <glyph unicode="ﻟﻠﻪ" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+ <glyph unicode="ﻟﻠﻪ" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+ <glyph unicode="ﻟﻠﻪ" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+ <glyph unicode="ﻟﻠﻪ" horiz-adv-x="1235" arabic-form="isolated" d="M0 0" />
+ </font>
+</defs></svg>
Modified: trunk/Source/WebCore/ChangeLog (187684 => 187685)
--- trunk/Source/WebCore/ChangeLog 2015-07-31 22:20:30 UTC (rev 187684)
+++ trunk/Source/WebCore/ChangeLog 2015-07-31 22:24:56 UTC (rev 187685)
@@ -1,3 +1,17 @@
+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-07-31 Jeremy Jones <jere...@apple.com>
Rename AVPlayerLayerView to _AVPlayerLayerView.
Modified: trunk/Source/WebCore/svg/SVGToOTFFontConversion.cpp (187684 => 187685)
--- trunk/Source/WebCore/svg/SVGToOTFFontConversion.cpp 2015-07-31 22:20:30 UTC (rev 187684)
+++ trunk/Source/WebCore/svg/SVGToOTFFontConversion.cpp 2015-07-31 22:24:56 UTC (rev 187685)
@@ -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