[ https://issues.apache.org/jira/browse/FOP-3036?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Simon Steiner resolved FOP-3036. -------------------------------- Resolution: Duplicate > InternaResourceResolver fails on schemes starting with "data" > ------------------------------------------------------------- > > Key: FOP-3036 > URL: https://issues.apache.org/jira/browse/FOP-3036 > Project: FOP > Issue Type: Bug > Components: unqualified > Affects Versions: 2.6 > Reporter: Michael Kainzbauer > Priority: Major > > org.apache.fop.apps.io.InternalResourceResolver seems to check for "DataURIs" > in a wrong way: > > {{public Resource getResource(String stringUri) throws IOException, > URISyntaxException {}} > {{return > *{color:#ff0000}s{color}{color:#ff0000}tringUri.startsWith("data:"){color}* ? > new Resource(this.resolveDataURI(stringUri)) : > this.{color:#57d9a3}getResource{color}(cleanURI(stringUri));}} > {{}}} > {{public Resource {color:#57d9a3}getResource{color}(URI uri) throws > IOException {}} > {{return uri.getScheme() != null && > *{color:#ff0000}uri.getScheme().startsWith("data"){color}* ? new > Resource(this.resolveDataURI(uri.toASCIIString())) : > this.resourceResolver.getResource(this.resolveFromBase(uri));}} > {{}}} > The first check in Method {{{}public Resource getResource(String > stringUri){}}}, if the stringUri starts with "data:" is correct: any URIs > with, an only with, the scheme "data" will be resolved with the > resolveDataURI method. > Example: > * resolving an URI with scheme "data" will be resolved with the > resolveDataURI method > * resolving an URI with scheme "datamatrix" will be delegated to {{public > Resource {color:#57d9a3}getResource{color}(URI uri) method.}} > * resolving an URI with scheme "foo" will be delegated to {{public Resource > {color:#57d9a3}getResource{color}(URI uri) method.}} > > The second check in {{{}public Resource {color:#57d9a3}getResource{color}(URI > uri){}}}, if the scheme starts with data is wrong: any URIs with a scheme > starting with"data" will be resolved with the resolveDataURI method. > Example: > * resolving an URI with scheme "data" will be resolved with the > resolveDataURI method > * {{resolving an URI with scheme "datamatrix" will be resolved with the > resolveDataURI method, which is wrong, should be handled by > this.resourceResolver.getResource(this.resolveFromBase(uri)}} > * {{resolving an URI with scheme "foo" will be handled by > this.resourceResolver.getResource(this.resolveFromBase(uri)}} > > The second method should be: > {{public Resource {color:#57d9a3}getResource{color}(URI uri) throws > IOException {}} > {{return uri.getScheme() != null {color:#172b4d}&& > uri.getScheme().{color}{color:#de350b}*equals*{color}{color:#172b4d}("data") > {color}? new Resource(this.resolveDataURI(uri.toASCIIString())) : > this.resourceResolver.getResource(this.resolveFromBase(uri));}} > {{}}} -- This message was sent by Atlassian Jira (v8.20.1#820001)