wam: Allow using embedded data URIs as add-on icons

[ci skip]

(cherry-picked from commit 4335bedeff)
This commit is contained in:
Iris Morelle 2018-05-08 02:24:50 -03:00
parent eb6ee82ae3
commit a4f7f5c37c
2 changed files with 36 additions and 26 deletions

View file

@ -147,6 +147,7 @@
* Fixed the wesnoth(6) manpage claiming the default log level is 'error' when it
has been 'warning' since version 1.9.0.
* Avoid trying to load invalid base64-encoded data URIs.
* wesnoth_addon_manager and the addons.wesnoth.org web index can now use data URIs.
## Version 1.13.12
### Security fixes

View file

@ -4,6 +4,7 @@
import html
import glob
import os
import re
import sys
import time
import urllib.parse
@ -260,32 +261,40 @@ def output(path, url, datadir, data):
if icon:
icon = icon.strip()
tilde = icon.find("~")
if tilde >= 0:
icon = icon[:tilde]
if "\\" in icon:
icon = icon.replace("\\", "/")
try:
os.mkdir(path + "/icons")
except OSError:
pass
if "." not in icon:
icon += ".png"
src = root_dir + icon
imgurl = "icons/" + os.path.basename(icon)
if not os.path.exists(src):
src = root_dir + "data/core/images/" + icon
if not os.path.exists(src):
src = root_dir + "images/" + icon
if not os.path.exists(src):
src = glob.glob(root_dir + "data/campaigns/*/images/" + icon)
if src:
src = src[0]
if not src or not os.path.exists(src):
sys.stderr.write("Cannot find icon " + icon + "\n")
src = root_dir + "images/misc/missing-image.png"
imgurl = "icons/missing-image.png"
images_to_tc.append((src, path + "/" + imgurl))
uri_manifest = re.match('^data:(image/(?:png|jpeg));base64,', icon)
if uri_manifest:
if uri_manifest.group(1) not in ('image/png', 'image/jpeg'):
sys.stderr.write("Data URI icon using unsupported content type " + uri_manifest.group(1))
else:
imgurl = icon
else:
tilde = icon.find("~")
if tilde >= 0:
icon = icon[:tilde]
if "\\" in icon:
icon = icon.replace("\\", "/")
try:
os.mkdir(path + "/icons")
except OSError:
pass
if "." not in icon:
icon += ".png"
src = root_dir + icon
imgurl = "icons/" + os.path.basename(icon)
if not os.path.exists(src):
src = root_dir + "data/core/images/" + icon
if not os.path.exists(src):
src = root_dir + "images/" + icon
if not os.path.exists(src):
src = glob.glob(root_dir + "data/campaigns/*/images/" + icon)
if src:
src = src[0]
if not src or not os.path.exists(src):
sys.stderr.write("Cannot find icon " + icon + "\n")
src = root_dir + "images/misc/missing-image.png"
imgurl = "icons/missing-image.png"
images_to_tc.append((src, path + "/" + imgurl))
w('<tr>')