Title: [267730] trunk
Revision
267730
Author
[email protected]
Date
2020-09-29 00:44:40 -0700 (Tue, 29 Sep 2020)

Log Message

Data URL image is not rendered if there is whitespace between the mime type and and "base64" string
https://bugs.webkit.org/show_bug.cgi?id=216900

Patch by Said Abou-Hallawa <[email protected]> on 2020-09-29
Reviewed by Darin Adler.

LayoutTests/imported/w3c:

* web-platform-tests/fetch/data-urls/processing.any-expected.txt:
* web-platform-tests/fetch/data-urls/processing.any.worker-expected.txt:

Source/WebCore:

According to https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs,
spaces are allowed in the data URL to allow better formatting. This
means spaces may appear before and after the comma and the semicolon
(if it exits in the Data URL).

Test: fast/images/image-data-url-with-spaces.html

* platform/network/DataURLDecoder.cpp:
(WebCore::DataURLDecoder::DecodeTask::process):

LayoutTests:

In the new test, 16 cases are included to cover all the permutations of
adding spaces before and after the comma and the semicolon. PNG and JPEG
formats are used to ensure the mime type is tested.

* fast/images/image-data-url-with-spaces-expected.html: Added.
* fast/images/image-data-url-with-spaces.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (267729 => 267730)


--- trunk/LayoutTests/ChangeLog	2020-09-29 07:20:13 UTC (rev 267729)
+++ trunk/LayoutTests/ChangeLog	2020-09-29 07:44:40 UTC (rev 267730)
@@ -1,3 +1,17 @@
+2020-09-29  Said Abou-Hallawa  <[email protected]>
+
+        Data URL image is not rendered if there is whitespace between the mime type and and "base64" string
+        https://bugs.webkit.org/show_bug.cgi?id=216900
+
+        Reviewed by Darin Adler.
+
+        In the new test, 16 cases are included to cover all the permutations of
+        adding spaces before and after the comma and the semicolon. PNG and JPEG
+        formats are used to ensure the mime type is tested.
+
+        * fast/images/image-data-url-with-spaces-expected.html: Added.
+        * fast/images/image-data-url-with-spaces.html: Added.
+
 2020-09-28  Tetsuharu Ohzeki  <[email protected]>
 
         webkitfullscreenchange does not fire for shadow DOM elements

Added: trunk/LayoutTests/fast/images/image-data-url-with-spaces-expected.html (0 => 267730)


--- trunk/LayoutTests/fast/images/image-data-url-with-spaces-expected.html	                        (rev 0)
+++ trunk/LayoutTests/fast/images/image-data-url-with-spaces-expected.html	2020-09-29 07:44:40 UTC (rev 267730)
@@ -0,0 +1,26 @@
+<body>
+    <div>
+        <img src=""
+        <img src=""
+        <img src=""
+        <img src=""
+    </div>
+    <div>
+        <img src=""
 ytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A90ooor+Kz/D8/9k="/>
+        <img src=""
 ytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A90ooor+Kz/D8/9k="/>
+        <img src=""
 ytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A90ooor+Kz/D8/9k="/>
+        <img src=""
 ytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A90ooor+Kz/D8/9k="/>
+    </div>
+    <div>
+        <img src=""
+        <img src=""
+        <img src=""
+        <img src=""
+    </div>
+    <div>
+        <img src=""
 ytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A90ooor+Kz/D8/9k="/>
+        <img src=""
 ytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A90ooor+Kz/D8/9k="/>
+        <img src=""
 ytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A90ooor+Kz/D8/9k="/>
+        <img src=""
 ytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A90ooor+Kz/D8/9k="/>
+    </div>
+</body>

Added: trunk/LayoutTests/fast/images/image-data-url-with-spaces.html (0 => 267730)


--- trunk/LayoutTests/fast/images/image-data-url-with-spaces.html	                        (rev 0)
+++ trunk/LayoutTests/fast/images/image-data-url-with-spaces.html	2020-09-29 07:44:40 UTC (rev 267730)
@@ -0,0 +1,26 @@
+<body>
+    <div>
+        <img src=""
+        <img src="" iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=="/>
+        <img src="" ,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=="/>
+        <img src="" , iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=="/>
+    </div>
+    <div>
+        <img src="" base64,/9j/4AAQSkZJRgABAQEAYABgAAD/4QCARXhpZgAATU0AKgAAAAgABQESAAMAAAABAAEAAAEaAAUAAAABAAAASgEbAAUAAAABAAAAUgEoAAMAAAABAAIAAIdpAAQAAAABAAAAWgAAAAAAAABgAAAAAQAAAGAAAAABAAKgAgAEAAAAAQAAABCgAwAEAAAAAQAAABAAAAAA/9sAQwACAQECAQECAgECAgICAgMFAwMDAwMGBAQDBQcGBwcHBgYGBwgLCQcICggGBgkNCQoLCwwMDAcJDQ4NDA4LDAwL/9sAQwECAgIDAgMFAwMFCwgGCAsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsL/8AAEQgAEAAQAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8j
 JytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A90ooor+Kz/D8/9k="/>
+        <img src="" base64, /9j/4AAQSkZJRgABAQEAYABgAAD/4QCARXhpZgAATU0AKgAAAAgABQESAAMAAAABAAEAAAEaAAUAAAABAAAASgEbAAUAAAABAAAAUgEoAAMAAAABAAIAAIdpAAQAAAABAAAAWgAAAAAAAABgAAAAAQAAAGAAAAABAAKgAgAEAAAAAQAAABCgAwAEAAAAAQAAABAAAAAA/9sAQwACAQECAQECAgECAgICAgMFAwMDAwMGBAQDBQcGBwcHBgYGBwgLCQcICggGBgkNCQoLCwwMDAcJDQ4NDA4LDAwL/9sAQwECAgIDAgMFAwMFCwgGCAsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsL/8AAEQgAEAAQAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8
 jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A90ooor+Kz/D8/9k="/>
+        <img src="" base64 ,/9j/4AAQSkZJRgABAQEAYABgAAD/4QCARXhpZgAATU0AKgAAAAgABQESAAMAAAABAAEAAAEaAAUAAAABAAAASgEbAAUAAAABAAAAUgEoAAMAAAABAAIAAIdpAAQAAAABAAAAWgAAAAAAAABgAAAAAQAAAGAAAAABAAKgAgAEAAAAAQAAABCgAwAEAAAAAQAAABAAAAAA/9sAQwACAQECAQECAgECAgICAgMFAwMDAwMGBAQDBQcGBwcHBgYGBwgLCQcICggGBgkNCQoLCwwMDAcJDQ4NDA4LDAwL/9sAQwECAgIDAgMFAwMFCwgGCAsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsL/8AAEQgAEAAQAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8
 jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A90ooor+Kz/D8/9k="/>
+        <img src="" base64 , /9j/4AAQSkZJRgABAQEAYABgAAD/4QCARXhpZgAATU0AKgAAAAgABQESAAMAAAABAAEAAAEaAAUAAAABAAAASgEbAAUAAAABAAAAUgEoAAMAAAABAAIAAIdpAAQAAAABAAAAWgAAAAAAAABgAAAAAQAAAGAAAAABAAKgAgAEAAAAAQAAABCgAwAEAAAAAQAAABAAAAAA/9sAQwACAQECAQECAgECAgICAgMFAwMDAwMGBAQDBQcGBwcHBgYGBwgLCQcICggGBgkNCQoLCwwMDAcJDQ4NDA4LDAwL/9sAQwECAgIDAgMFAwMFCwgGCAsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsL/8AAEQgAEAAQAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx
 8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A90ooor+Kz/D8/9k="/>
+    </div>
+    <div>
+        <img src="" ;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=="/>
+        <img src="" ;base64, iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=="/>
+        <img src="" ;base64 ,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=="/>
+        <img src="" ;base64 , iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=="/>
+    </div>
+    <div>
+        <img src="" ; base64,/9j/4AAQSkZJRgABAQEAYABgAAD/4QCARXhpZgAATU0AKgAAAAgABQESAAMAAAABAAEAAAEaAAUAAAABAAAASgEbAAUAAAABAAAAUgEoAAMAAAABAAIAAIdpAAQAAAABAAAAWgAAAAAAAABgAAAAAQAAAGAAAAABAAKgAgAEAAAAAQAAABCgAwAEAAAAAQAAABAAAAAA/9sAQwACAQECAQECAgECAgICAgMFAwMDAwMGBAQDBQcGBwcHBgYGBwgLCQcICggGBgkNCQoLCwwMDAcJDQ4NDA4LDAwL/9sAQwECAgIDAgMFAwMFCwgGCAsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsL/8AAEQgAEAAQAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8
 jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A90ooor+Kz/D8/9k="/>
+        <img src="" ; base64, /9j/4AAQSkZJRgABAQEAYABgAAD/4QCARXhpZgAATU0AKgAAAAgABQESAAMAAAABAAEAAAEaAAUAAAABAAAASgEbAAUAAAABAAAAUgEoAAMAAAABAAIAAIdpAAQAAAABAAAAWgAAAAAAAABgAAAAAQAAAGAAAAABAAKgAgAEAAAAAQAAABCgAwAEAAAAAQAAABAAAAAA/9sAQwACAQECAQECAgECAgICAgMFAwMDAwMGBAQDBQcGBwcHBgYGBwgLCQcICggGBgkNCQoLCwwMDAcJDQ4NDA4LDAwL/9sAQwECAgIDAgMFAwMFCwgGCAsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsL/8AAEQgAEAAQAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx
 8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A90ooor+Kz/D8/9k="/>
+        <img src="" ; base64 ,/9j/4AAQSkZJRgABAQEAYABgAAD/4QCARXhpZgAATU0AKgAAAAgABQESAAMAAAABAAEAAAEaAAUAAAABAAAASgEbAAUAAAABAAAAUgEoAAMAAAABAAIAAIdpAAQAAAABAAAAWgAAAAAAAABgAAAAAQAAAGAAAAABAAKgAgAEAAAAAQAAABCgAwAEAAAAAQAAABAAAAAA/9sAQwACAQECAQECAgECAgICAgMFAwMDAwMGBAQDBQcGBwcHBgYGBwgLCQcICggGBgkNCQoLCwwMDAcJDQ4NDA4LDAwL/9sAQwECAgIDAgMFAwMFCwgGCAsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsL/8AAEQgAEAAQAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx
 8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A90ooor+Kz/D8/9k="/>
+        <img src="" ; base64 , /9j/4AAQSkZJRgABAQEAYABgAAD/4QCARXhpZgAATU0AKgAAAAgABQESAAMAAAABAAEAAAEaAAUAAAABAAAASgEbAAUAAAABAAAAUgEoAAMAAAABAAIAAIdpAAQAAAABAAAAWgAAAAAAAABgAAAAAQAAAGAAAAABAAKgAgAEAAAAAQAAABCgAwAEAAAAAQAAABAAAAAA/9sAQwACAQECAQECAgECAgICAgMFAwMDAwMGBAQDBQcGBwcHBgYGBwgLCQcICggGBgkNCQoLCwwMDAcJDQ4NDA4LDAwL/9sAQwECAgIDAgMFAwMFCwgGCAsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsL/8AAEQgAEAAQAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXG
 x8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A90ooor+Kz/D8/9k="/>
+    </div>
+</body>

Modified: trunk/LayoutTests/imported/w3c/ChangeLog (267729 => 267730)


--- trunk/LayoutTests/imported/w3c/ChangeLog	2020-09-29 07:20:13 UTC (rev 267729)
+++ trunk/LayoutTests/imported/w3c/ChangeLog	2020-09-29 07:44:40 UTC (rev 267730)
@@ -1,3 +1,13 @@
+2020-09-29  Said Abou-Hallawa  <[email protected]>
+
+        Data URL image is not rendered if there is whitespace between the mime type and and "base64" string
+        https://bugs.webkit.org/show_bug.cgi?id=216900
+
+        Reviewed by Darin Adler.
+
+        * web-platform-tests/fetch/data-urls/processing.any-expected.txt:
+        * web-platform-tests/fetch/data-urls/processing.any.worker-expected.txt:
+
 2020-09-28  Chris Dumez  <[email protected]>
 
         Unreviewed, mark webaudio/the-audio-api/the-analysernode-interface/test-analyser-output.html as flaky instead of skipping it entirely.

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/fetch/data-urls/processing.any-expected.txt (267729 => 267730)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/fetch/data-urls/processing.any-expected.txt	2020-09-29 07:20:13 UTC (rev 267729)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/fetch/data-urls/processing.any-expected.txt	2020-09-29 07:44:40 UTC (rev 267730)
@@ -52,12 +52,12 @@
 PASS "data:x;base64x,WA"
 PASS "data:x;base64;x,WA"
 PASS "data:x;base64=x,WA"
-FAIL "data:; base64,WA" assert_array_equals: lengths differ, expected array [88] length 1, got object "87,65" length 2
-FAIL "data:;  base64,WA" assert_array_equals: lengths differ, expected array [88] length 1, got object "87,65" length 2
-FAIL "data:  ;charset=x   ;  base64,WA" assert_array_equals: lengths differ, expected array [88] length 1, got object "87,65" length 2
+PASS "data:; base64,WA"
+PASS "data:;  base64,WA"
+PASS "data:  ;charset=x   ;  base64,WA"
 PASS "data:;base64;,WA"
-FAIL "data:;base64 ,WA" assert_array_equals: lengths differ, expected array [88] length 1, got object "87,65" length 2
-FAIL "data:;base64   ,WA" assert_array_equals: lengths differ, expected array [88] length 1, got object "87,65" length 2
+PASS "data:;base64 ,WA"
+PASS "data:;base64   ,WA"
 PASS "data:;base 64,WA"
 PASS "data:;BASe64,WA"
 PASS "data:;%62ase64,WA"

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/fetch/data-urls/processing.any.worker-expected.txt (267729 => 267730)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/fetch/data-urls/processing.any.worker-expected.txt	2020-09-29 07:20:13 UTC (rev 267729)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/fetch/data-urls/processing.any.worker-expected.txt	2020-09-29 07:44:40 UTC (rev 267730)
@@ -52,12 +52,12 @@
 PASS "data:x;base64x,WA"
 PASS "data:x;base64;x,WA"
 PASS "data:x;base64=x,WA"
-FAIL "data:; base64,WA" assert_array_equals: lengths differ, expected array [88] length 1, got object "87,65" length 2
-FAIL "data:;  base64,WA" assert_array_equals: lengths differ, expected array [88] length 1, got object "87,65" length 2
-FAIL "data:  ;charset=x   ;  base64,WA" assert_array_equals: lengths differ, expected array [88] length 1, got object "87,65" length 2
+PASS "data:; base64,WA"
+PASS "data:;  base64,WA"
+PASS "data:  ;charset=x   ;  base64,WA"
 PASS "data:;base64;,WA"
-FAIL "data:;base64 ,WA" assert_array_equals: lengths differ, expected array [88] length 1, got object "87,65" length 2
-FAIL "data:;base64   ,WA" assert_array_equals: lengths differ, expected array [88] length 1, got object "87,65" length 2
+PASS "data:;base64 ,WA"
+PASS "data:;base64   ,WA"
 PASS "data:;base 64,WA"
 PASS "data:;BASe64,WA"
 PASS "data:;%62ase64,WA"

Modified: trunk/Source/WebCore/ChangeLog (267729 => 267730)


--- trunk/Source/WebCore/ChangeLog	2020-09-29 07:20:13 UTC (rev 267729)
+++ trunk/Source/WebCore/ChangeLog	2020-09-29 07:44:40 UTC (rev 267730)
@@ -1,3 +1,20 @@
+2020-09-29  Said Abou-Hallawa  <[email protected]>
+
+        Data URL image is not rendered if there is whitespace between the mime type and and "base64" string
+        https://bugs.webkit.org/show_bug.cgi?id=216900
+
+        Reviewed by Darin Adler.
+
+        According to https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs,
+        spaces are allowed in the data URL to allow better formatting. This
+        means spaces may appear before and after the comma and the semicolon
+        (if it exits in the Data URL).
+
+        Test: fast/images/image-data-url-with-spaces.html
+
+        * platform/network/DataURLDecoder.cpp:
+        (WebCore::DataURLDecoder::DecodeTask::process):
+
 2020-09-28  Yusuke Suzuki  <[email protected]>
 
         Use JSC_DECLARE_JIT_OPERATION / JSC_DECLARE_CUSTOM_GETTER / JSC_DECLARE_CUSTOM_SETTER

Modified: trunk/Source/WebCore/platform/network/DataURLDecoder.cpp (267729 => 267730)


--- trunk/Source/WebCore/platform/network/DataURLDecoder.cpp	2020-09-29 07:20:13 UTC (rev 267729)
+++ trunk/Source/WebCore/platform/network/DataURLDecoder.cpp	2020-09-29 07:44:40 UTC (rev 267730)
@@ -66,25 +66,42 @@
 
     bool process()
     {
+        // Syntax:
+        //  url := data:<header>,<encodedData>
+        //  header := [<mediatype>][;base64]
+        //  mediatype := [<mimetype>][;charset=<charsettype>]
+
         if (urlString.find(',') == notFound)
             return false;
+
         const char dataString[] = "data:";
-        const char base64String[] = ";base64";
-
         ASSERT(urlString.startsWith(dataString));
 
-        size_t headerEnd = urlString.find(',', strlen(dataString));
+        size_t headerStart = strlen(dataString);
+        size_t headerEnd = urlString.find(',', headerStart);
         size_t encodedDataStart = headerEnd == notFound ? headerEnd : headerEnd + 1;
 
         encodedData = StringView(urlString).substring(encodedDataStart);
-        auto header = StringView(urlString).substring(strlen(dataString), headerEnd - strlen(dataString));
-        isBase64 = header.endsWithIgnoringASCIICase(StringView(base64String));
-        auto mediaType = (isBase64 ? header.substring(0, header.length() - strlen(base64String)) : header).toString();
-        mediaType = mediaType.stripWhiteSpace();
+        auto header = StringView(urlString).substring(headerStart, headerEnd - headerStart);
+        
+        // There might one or two semicolons in the header, find the last one.
+        size_t mediaTypeEnd = header.reverseFind(';');
+        mediaTypeEnd = mediaTypeEnd == notFound ? header.length() : mediaTypeEnd;
+
+        // formatTypeStart might be at the begining of "base64" or "charset=...".
+        size_t formatTypeStart = mediaTypeEnd + 1;
+        auto formatType = header.substring(formatTypeStart, header.length() - formatTypeStart);
+        formatType = stripLeadingAndTrailingHTTPSpaces(formatType);
+
+        isBase64 = equalLettersIgnoringASCIICase(formatType, "base64");
+
+        // If header does not end with "base64", mediaType should be the whole header.
+        auto mediaType = (isBase64 ? header.substring(0, mediaTypeEnd) : header).toString();
+        mediaType = stripLeadingAndTrailingHTTPSpaces(mediaType);
         if (mediaType.startsWith(';'))
             mediaType.insert("text/plain", 0);
+
         result = parseMediaType(mediaType);
-
         return true;
     }
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to