RFR: 8277572: ImageStorage should correctly handle MIME types for images encoded in data URIs [v6]
Kevin Rushforth
kcr at openjdk.java.net
Wed Jan 12 22:27:34 UTC 2022
On Sat, 8 Jan 2022 17:30:55 GMT, Michael Strauß <mstrauss at openjdk.org> wrote:
>> `com.sun.javafx.iio.ImageStorage` currently ignores the MIME image subtype specified for images encoded in data URIs. This should be improved as follows:
>>
>> 1. If the specified image subtype is not supported, an exception will be thrown.
>> 2. If the specified image subtype is supported, but the data contained in the URI is of a different (but also supported) image format, the image will be loaded and a warning will be logged. For example, if the MIME type is "image/jpeg", but the image data is PNG, the following warning will be generated:
>>
>>
>> Image format 'PNG' does not match MIME type 'image/jpeg' in URI 'data:image/jpeg;base64,iVBORw0KGgoAAA...AAAElFTkSuQmCC'
>>
>>
>> Also, the javadoc of `javafx.scene.image.Image` incorrectly states:
>>
>> 94 * If a URL uses the "data" scheme, the data must be base64-encoded
>> 95 * and the MIME type must either be empty or a subtype of the
>> 96 * {@code image} type.
>>
>> However, omitting the MIME type of a data URI is specified to imply "text/plain" (RFC 2397, section 2). Since the `com.sun.javafx.util.DataURI` class is implemented according to this specification, trying to load an image without MIME type correctly fails with an `ImageStorageException`: "Unexpected MIME type: text".
>>
>> The solution is to fix the documentation:
>>
>> 94 * If a URL uses the "data" scheme, the data must be base64-encoded
>> - 95 * and the MIME type must either be empty or a subtype of the
>> - 96 * {@code image} type.
>> + 95 * and the MIME type must be a subtype of the {@code image} type.
>> + 96 * The MIME type must match the image format of the data contained in
>> + 97 * the URL. In case of a mismatch between MIME type and image format,
>> + 98 * the image will be loaded if the image format can be determined by
>> + 99 * JavaFX, and a warning will be logged.
>
> Michael Strauß has updated the pull request incrementally with one additional commit since the last revision:
>
> Don't let EOFException bubble up
Looks good.
Pending a second reviewer.
-------------
Marked as reviewed by kcr (Lead).
PR: https://git.openjdk.java.net/jfx/pull/676
More information about the openjfx-dev
mailing list