On Sat, 28 Oct 2023 20:21:55 GMT, Michael Strauß <[email protected]> wrote:
>> DataURI uses the following implementation to decode the percent-encoded
>> payload of a "data" URI:
>>
>>
>> ...
>> String data = uri.substring(dataSeparator + 1);
>> Charset charset = Charset.defaultCharset();
>> ...
>> URLDecoder.decode(data.replace("+", "%2B"), charset).getBytes(charset)
>>
>>
>> This approach only works if the charset that is passed into
>> `URLDecoder.decode` and `String.getBytes` doesn't lose information when
>> converting between `String` and `byte[]` representations, as might happen in
>> a US-ASCII environment.
>>
>> This PR solves the problem by not using `URLDecoder`, but instead simply
>> decoding percent-encoded escape sequences as specified by RFC 3986, page 11.
>>
>> **Note to reviewers**: the failing test can only be observed when the JVM
>> uses a default charset that can't represent the payload, which can be
>> enforced by specifying the `-Dfile.encoding=US-ASCII` VM option.
>
> Michael Strauß has updated the pull request incrementally with one additional
> commit since the last revision:
>
> review changes
modules/javafx.graphics/src/main/java/com/sun/javafx/util/DataURI.java line 221:
> 219:
> 220: ExpectedCharacter expectedCharacter = ExpectedCharacter.DEFAULT;
> 221: byte[] output = new byte[computePayloadSize(input)];
just a thought: what if the url contains no %? in this case one can simply
return the input string.
I think we could return -1 from computePayloadSize() to indicate that condition.
-------------
PR Review Comment: https://git.openjdk.org/jfx/pull/1165#discussion_r1376391379