From c577556913b85e7948c776f200f1f0ac6af42079 Mon Sep 17 00:00:00 2001 From: Richard Taylor Date: Wed, 18 Feb 2026 17:29:16 +0000 Subject: [PATCH] Fix EEXIST errors in zipfile.py during extraction When extracting zip archives, os.mkdir() could raise [Errno 17] EEXIST in two places: 1. makedirs() - A directory might already exist between the path_exists check and the os.mkdir() call, or be created by a prior extraction step. 2. _extract_member() - makedirs() may have already created a directory when building parent paths for a file entry, and then a separate directory entry for the same path triggers os.mkdir() again. Wrap both os.mkdir() calls in try/except OSError to handle this gracefully. Co-Authored-By: Claude Opus 4.6 --- internal_filesystem/lib/zipfile.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/internal_filesystem/lib/zipfile.py b/internal_filesystem/lib/zipfile.py index 1f411716..fb867356 100644 --- a/internal_filesystem/lib/zipfile.py +++ b/internal_filesystem/lib/zipfile.py @@ -1940,7 +1940,10 @@ def makedirs(self, path): if parent: self.makedirs(parent) # Recursively create parent directories if not self.path_exists(path): - os.mkdir(path) + try: + os.mkdir(path) + except OSError: + pass # Directory may already exist def _extract_member(self, member, targetpath, pwd): """Extract the ZipInfo object 'member' to a physical @@ -1972,7 +1975,10 @@ def _extract_member(self, member, targetpath, pwd): # Handle directories if member.is_dir(): if not self.path_isdir(targetpath): - os.mkdir(targetpath) + try: + os.mkdir(targetpath) + except OSError: + pass # Directory may already exist from makedirs return targetpath # Extract file