summaryrefslogtreecommitdiff
path: root/sphinx/transforms
diff options
context:
space:
mode:
authorTakeshi KOMIYA <i.tkomiya@gmail.com>2020-02-09 15:29:10 +0900
committerTakeshi KOMIYA <i.tkomiya@gmail.com>2020-02-09 15:29:10 +0900
commita17ad5cd39d130f0c0aac8d72bca61372a609fef (patch)
tree8f1e79573e20ea584b91854fbb1c9da3bdf2c29e /sphinx/transforms
parentd07985ed859b250eaf0ae96065c300452aa6499b (diff)
parent41eb2575f1a03fe41666e6af6253a9ced44a86b9 (diff)
downloadsphinx-git-a17ad5cd39d130f0c0aac8d72bca61372a609fef.tar.gz
Merge branch '2.3.2' into 2.0
Diffstat (limited to 'sphinx/transforms')
-rw-r--r--sphinx/transforms/post_transforms/images.py4
1 files changed, 4 insertions, 0 deletions
diff --git a/sphinx/transforms/post_transforms/images.py b/sphinx/transforms/post_transforms/images.py
index 758e92f0d..d1b513b27 100644
--- a/sphinx/transforms/post_transforms/images.py
+++ b/sphinx/transforms/post_transforms/images.py
@@ -9,6 +9,7 @@
"""
import os
+import re
from hashlib import sha1
from math import ceil
from typing import Any, Dict, List, Tuple
@@ -27,6 +28,7 @@ from sphinx.util.osutil import ensuredir, movefile
logger = logging.getLogger(__name__)
MAX_FILENAME_LEN = 32
+CRITICAL_PATH_CHAR_RE = re.compile('[:;<>|*" ]')
class BaseImageConverter(SphinxTransform):
@@ -65,6 +67,7 @@ class ImageDownloader(BaseImageConverter):
if basename == '' or len(basename) > MAX_FILENAME_LEN:
filename, ext = os.path.splitext(node['uri'])
basename = sha1(filename.encode()).hexdigest() + ext
+ basename = re.sub(CRITICAL_PATH_CHAR_RE, "_", basename)
dirname = node['uri'].replace('://', '/').translate({ord("?"): "/",
ord("&"): "/"})
@@ -146,6 +149,7 @@ class DataURIExtractor(BaseImageConverter):
def get_filename_for(filename: str, mimetype: str) -> str:
basename = os.path.basename(filename)
+ basename = re.sub(CRITICAL_PATH_CHAR_RE, "_", basename)
return os.path.splitext(basename)[0] + get_image_extension(mimetype)