create3000 / x_ite

X_ITE X3D Browser, view and manipulate X3D and VRML scenes in HTML.
https://create3000.github.io/x_ite/
Other
67 stars 15 forks source link

dataURL regex #42

Closed andreasplesch closed 5 years ago

andreasplesch commented 5 years ago

FileLoader uses this regex

        dataURL       = /^data\:([^]*?)(?:;([^]*?))?(;base64)?,([^]*)$/

It then uses .exec to apply to a URL. Here is an example:

r=dataURL.exec('data:application/xml;base64,wrwljrkew')
(5) ["data:application/xml;base64,wrwljrkew", "application/xml", "base64", undefined, "wrwljrkew", index: 0, input: "data:application/xml;base64,wrwljrkew", groups: undefined]
0: "data:application/xml;base64,wrwljrkew"
1: "application/xml"
2: "base64"
3: undefined
4: "wrwljrkew"
groups: undefined
index: 0
input: "data:application/xml;base64,wrwljrkew"
length: 5
__proto__: Array(0)

But then it looks for base64 in the result to convert back here: https://github.com/create3000/x_ite/blob/4c350320b62848514aeb1f9d6b3f92a303121fb2/src/x_ite/InputOutput/FileLoader.js#L461

This seems off.

It should use result[2].

And it should compare to base64, not ;base64

andreasplesch commented 5 years ago

Here is an example:

https://raw.githack.com/andreasplesch/Library/e070446bf8a7deb022babd07e9ca641876953936/Uses_dataURI.html

with the dataURL below.

Editing the base64 check to

if (result [2] === "base64") 

allows for proper loading. I can prepare a short PR if useful.

dataURL

data:text/xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4gCjwhRE9DVFlQRSBYM0QgUFVCTElDICJJU08vL1dlYjNELy9EVEQgWDNEIDMuMy8vRU4iICJodHRwOi8vd3d3LndlYjNkLm9yZy9zcGVjaWZpY2F0aW9ucy94M2QtMy4zLmR0ZCI+CjxYM0QgcHJvZmlsZT0nSW50ZXJjaGFuZ2UnIHZlcnNpb249JzMuMycgIHhtbG5zOnhzZD0naHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UnIHhzZDpub05hbWVzcGFjZVNjaGVtYUxvY2F0aW9uID0nIGh0dHA6Ly93d3cud2ViM2Qub3JnL3NwZWNpZmljYXRpb25zL3gzZC0zLjMueHNkICc+CjxoZWFkPgo8bWV0YSBuYW1lPSd0aXRsZScgY29udGVudD0nU3BoZXJlLngzZCcvPiAKPG1ldGEgbmFtZT0nZGVzY3JpcHRpb24nIGNvbnRlbnQ9J1NwaGVyZSBnZW9tZXRyaWMgcHJpbWl0aXZlIG5vZGUuJy8+IAo8bWV0YSBuYW1lPSdjcmVhdG9yJyBjb250ZW50PSdMZW9uYXJkIERhbHkgYW5kIERvbiBCcnV0em1hbicvPiAKPG1ldGEgbmFtZT0nY3JlYXRlZCcgY29udGVudD0nMSBKYW51YXJ5IDIwMDcnLz4gCjxtZXRhIG5hbWU9J21vZGlmaWVkJyBjb250ZW50PScyNyBEZWNlbWJlciAyMDA3Jy8+IAo8bWV0YSBuYW1lPSdyZWZlcmVuY2UnIGNvbnRlbnQ9JyBodHRwOi8vWDNkR3JhcGhpY3MuY29tICcvPiAKPG1ldGEgbmFtZT0ncmVmZXJlbmNlJyBjb250ZW50PScgaHR0cDovL3d3dy53ZWIzZC5vcmcveDNkL2NvbnRlbnQvZXhhbXBsZXMvWDNkUmVzb3VyY2VzLmh0bWwgJy8+IAo8bWV0YSBuYW1lPSdyaWdodHMnIGNvbnRlbnQ9J0NvcHlyaWdodCBEb24gQnJ1dHptYW4gYW5kIExlb25hcmQgRGFseSAyMDA3Jy8+IAo8bWV0YSBuYW1lPSdzdWJqZWN0JyBjb250ZW50PScgWDNEIGJvb2ssIFgzRCBncmFwaGljcywgWDNELUVkaXQsIGh0dHA6Ly93d3cueDNkR3JhcGhpY3MuY29tICcvPiAKPG1ldGEgbmFtZT0naWRlbnRpZmllcicgY29udGVudD0nIGh0dHA6Ly9YM2RHcmFwaGljcy5jb20vZXhhbXBsZXMvWDNkRm9yV2ViQXV0aG9ycy9DaGFwdGVyMDJHZW9tZXRyeVByaW1pdGl2ZXMvU3BoZXJlLngzZCAnLz4gCjxtZXRhIG5hbWU9J2dlbmVyYXRvcicgY29udGVudD0nWDNELUVkaXQgMy4zLCBodHRwczovL3NhdmFnZS5ucHMuZWR1L1gzRC1FZGl0Jy8+IAo8bWV0YSBuYW1lPSdsaWNlbnNlJyBjb250ZW50PScgLi4vbGljZW5zZS5odG1sJy8+CjwvaGVhZD4gCjxTY2VuZT4KPEJhY2tncm91bmQgc2t5Q29sb3I9JzEgMSAxJy8+IAo8Vmlld3BvaW50IGRlc2NyaXB0aW9uPSdCb29rIFZpZXcnIHBvc2l0aW9uPScwIDAgMycvPiAKPFNoYXBlPgo8U3BoZXJlLz4gCjxBcHBlYXJhbmNlPgo8TWF0ZXJpYWwvPgo8L0FwcGVhcmFuY2U+CjwvU2hhcGU+CjwvU2NlbmU+CjwvWDNEPiA=

decoded:


<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.3//EN" "http://www.web3d.org/specifications/x3d-3.3.dtd">
<X3D profile='Interchange' version='3.3'  xmlns:xsd='http://www.w3.org/2001/XMLSchema-instance' xsd:noNamespaceSchemaLocation =' http://www.web3d.org/specifications/x3d-3.3.xsd '>
<head>
<meta name='title' content='Sphere.x3d'/> 
<meta name='description' content='Sphere geometric primitive node.'/> 
<meta name='creator' content='Leonard Daly and Don Brutzman'/> 
<meta name='created' content='1 January 2007'/> 
<meta name='modified' content='27 December 2007'/> 
<meta name='reference' content=' http://X3dGraphics.com '/> 
<meta name='reference' content=' http://www.web3d.org/x3d/content/examples/X3dResources.html '/> 
<meta name='rights' content='Copyright Don Brutzman and Leonard Daly 2007'/> 
<meta name='subject' content=' X3D book, X3D graphics, X3D-Edit, http://www.x3dGraphics.com '/> 
<meta name='identifier' content=' http://X3dGraphics.com/examples/X3dForWebAuthors/Chapter02GeometryPrimitives/Sphere.x3d '/> 
<meta name='generator' content='X3D-Edit 3.3, https://savage.nps.edu/X3D-Edit'/> 
<meta name='license' content=' ../license.html'/>
</head> 
<Scene>
<Background skyColor='1 1 1'/> 
<Viewpoint description='Book View' position='0 0 3'/> 
<Shape>
<Sphere/> 
<Appearance>
<Material/>
</Appearance>
</Shape>
</Scene>
</X3D> ```
create3000 commented 5 years ago

Thank you for reporting this bug. Fix the regex an use now: /^data:(.*?)(?:;charset=(.*?))?(?:;(base64))?,([^]*)$/ to parse the data url.

The base64 encoded example works and show a default sphere. :)

andreasplesch commented 5 years ago

Thanks!