Null pointer deref in WidthIterator
authormmaxfield@apple.com <mmaxfield@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 28 Aug 2018 00:37:17 +0000 (00:37 +0000)
committermmaxfield@apple.com <mmaxfield@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 28 Aug 2018 00:37:17 +0000 (00:37 +0000)
https://bugs.webkit.org/show_bug.cgi?id=188993

Reviewed by Brent Fulgham.

Source/WebCore:

Test: fast/text/rtl-justification.html

We simply need to guard glyphBuffer like we do in the rest of the function.

* platform/graphics/WidthIterator.cpp:
(WebCore::WidthIterator::advanceInternal):

LayoutTests:

* fast/text/rtl-justification-expected.html: Added.
* fast/text/rtl-justification.html: Added.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@235416 268f45cc-cd09-0410-ab3c-d52691b4dbfc

LayoutTests/ChangeLog
LayoutTests/fast/text/rtl-justification-expected.html [new file with mode: 0644]
LayoutTests/fast/text/rtl-justification.html [new file with mode: 0644]
Source/WebCore/ChangeLog
Source/WebCore/platform/graphics/WidthIterator.cpp

index cd62676..3ed81e5 100644 (file)
@@ -1,3 +1,13 @@
+2018-08-27  Myles C. Maxfield  <mmaxfield@apple.com>
+
+        Null pointer deref in WidthIterator
+        https://bugs.webkit.org/show_bug.cgi?id=188993
+
+        Reviewed by Brent Fulgham.
+
+        * fast/text/rtl-justification-expected.html: Added.
+        * fast/text/rtl-justification.html: Added.
+
 2018-08-27  Sihui Liu  <sihui_liu@apple.com>
 
         [ MacOS iOS ] Layout Test storage/indexeddb/modern/opendatabase-after-storage-crash.html is flaky
diff --git a/LayoutTests/fast/text/rtl-justification-expected.html b/LayoutTests/fast/text/rtl-justification-expected.html
new file mode 100644 (file)
index 0000000..7a8815c
--- /dev/null
@@ -0,0 +1,42 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+</head>
+<body>
+This test passes if there is no crash.
+<div dir="rtl" style="width: 200px; text-align: justify;">
+תמיד להגיב על
+תמיד להגיב על
+תמיד להגיב על
+תמיד להגיב על
+תמיד להגיב על
+תמיד להגיב על
+תמיד להגיב על
+תמיד להגיב על
+תמיד להגיב על
+תמיד להגיב על
+תמיד להגיב על
+תמיד להגיב על
+תמיד להגיב על
+תמיד להגיב על
+תמיד להגיב על
+תמיד להגיב על
+תמיד להגיב על
+תמיד להגיב על
+תמיד להגיב על
+תמיד להגיב על
+תמיד להגיב על
+תמיד להגיב על
+תמיד להגיב על
+תמיד להגיב על
+תמיד להגיב על
+תמיד להגיב על
+תמיד להגיב על
+תמיד להגיב על
+תמיד להגיב על
+תמיד להגיב על
+תמיד להגיב על
+</div>
+</body>
+</html>
diff --git a/LayoutTests/fast/text/rtl-justification.html b/LayoutTests/fast/text/rtl-justification.html
new file mode 100644 (file)
index 0000000..7a8815c
--- /dev/null
@@ -0,0 +1,42 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+</head>
+<body>
+This test passes if there is no crash.
+<div dir="rtl" style="width: 200px; text-align: justify;">
+תמיד להגיב על
+תמיד להגיב על
+תמיד להגיב על
+תמיד להגיב על
+תמיד להגיב על
+תמיד להגיב על
+תמיד להגיב על
+תמיד להגיב על
+תמיד להגיב על
+תמיד להגיב על
+תמיד להגיב על
+תמיד להגיב על
+תמיד להגיב על
+תמיד להגיב על
+תמיד להגיב על
+תמיד להגיב על
+תמיד להגיב על
+תמיד להגיב על
+תמיד להגיב על
+תמיד להגיב על
+תמיד להגיב על
+תמיד להגיב על
+תמיד להגיב על
+תמיד להגיב על
+תמיד להגיב על
+תמיד להגיב על
+תמיד להגיב על
+תמיד להגיב על
+תמיד להגיב על
+תמיד להגיב על
+תמיד להגיב על
+</div>
+</body>
+</html>
index 7ff98e3..063c481 100644 (file)
@@ -1,3 +1,17 @@
+2018-08-27  Myles C. Maxfield  <mmaxfield@apple.com>
+
+        Null pointer deref in WidthIterator
+        https://bugs.webkit.org/show_bug.cgi?id=188993
+
+        Reviewed by Brent Fulgham.
+
+        Test: fast/text/rtl-justification.html
+
+        We simply need to guard glyphBuffer like we do in the rest of the function.
+
+        * platform/graphics/WidthIterator.cpp:
+        (WebCore::WidthIterator::advanceInternal):
+
 2018-08-27  Wenson Hsieh  <wenson_hsieh@apple.com>
 
         [Attachment Support] Remove WebCore::AttachmentDisplayOptions and friends
index 0514092..9bde879 100644 (file)
@@ -345,7 +345,7 @@ inline unsigned WidthIterator::advanceInternal(TextIterator& textIterator, Glyph
         previousCharacter = character;
     }
 
-    if (leftoverJustificationWidth) {
+    if (glyphBuffer && leftoverJustificationWidth) {
         if (m_forTextEmphasis)
             glyphBuffer->add(lastFontData->zeroWidthSpaceGlyph(), lastFontData, leftoverJustificationWidth, m_run.length() - 1);
         else