wam: Allow using embedded data URIs as add-on icons
[ci skip]
(cherry-picked from commit 4335bedeff
)
This commit is contained in:
parent
eb6ee82ae3
commit
a4f7f5c37c
2 changed files with 36 additions and 26 deletions
|
@ -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
|
||||
|
|
|
@ -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>')
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue