summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGabriel Venberg <gabevenberg@gmail.com>2023-06-26 09:09:08 (GMT)
committerGitHub <noreply@github.com>2023-06-26 09:09:08 (GMT)
commitdac3d389e747c6f6ef17e4e2f38731c8ef83eada (patch)
tree72dae20fcf68fb01b53651575bbb31f606a2c5bd
parenta12e8ffb49e05a1d1874389318911ce9685db232 (diff)
downloadcpython-dac3d389e747c6f6ef17e4e2f38731c8ef83eada.zip
cpython-dac3d389e747c6f6ef17e4e2f38731c8ef83eada.tar.gz
cpython-dac3d389e747c6f6ef17e4e2f38731c8ef83eada.tar.bz2
gh-104527: zippapp will now avoid appending an archive to itself. (gh-106076)
zippapp will now avoid appending an archive to itself.
-rw-r--r--Lib/zipapp.py2
-rw-r--r--Misc/NEWS.d/next/Library/2023-06-25-06-57-24.gh-issue-104527.TJEUkd.rst1
2 files changed, 2 insertions, 1 deletions
diff --git a/Lib/zipapp.py b/Lib/zipapp.py
index d8ebfcb..03a214e 100644
--- a/Lib/zipapp.py
+++ b/Lib/zipapp.py
@@ -138,7 +138,7 @@ def create_archive(source, target=None, interpreter=None, main=None,
with zipfile.ZipFile(fd, 'w', compression=compression) as z:
for child in sorted(source.rglob('*')):
arcname = child.relative_to(source)
- if filter is None or filter(arcname):
+ if filter is None or filter(arcname) and child.resolve() != arcname.resolve():
z.write(child, arcname.as_posix())
if main_py:
z.writestr('__main__.py', main_py.encode('utf-8'))
diff --git a/Misc/NEWS.d/next/Library/2023-06-25-06-57-24.gh-issue-104527.TJEUkd.rst b/Misc/NEWS.d/next/Library/2023-06-25-06-57-24.gh-issue-104527.TJEUkd.rst
new file mode 100644
index 0000000..50b845b
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2023-06-25-06-57-24.gh-issue-104527.TJEUkd.rst
@@ -0,0 +1 @@
+Zipapp will now skip over apending an archive to itself.