Skip to content

Commit

Permalink
[pp:metadata] fix using '..' in directories on Windows (#5942, #6094)
Browse files Browse the repository at this point in the history
  • Loading branch information
mikf committed Aug 27, 2024
1 parent f669b3f commit eef5beb
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 14 deletions.
28 changes: 15 additions & 13 deletions gallery_dl/path.py
Original file line number Diff line number Diff line change
Expand Up @@ -184,29 +184,31 @@ def _enum_file(self):
def set_directory(self, kwdict):
"""Build directory path and create it if necessary"""
self.kwdict = kwdict
sep = os.sep

segments = self.build_directory(kwdict)
if segments:
self.directory = directory = self.basedirectory + self.clean_path(
sep.join(segments) + sep)
os.sep.join(segments) + os.sep)
else:
self.directory = directory = self.basedirectory

if WINDOWS and self.extended:
# Enable longer-than-260-character paths
directory = os.path.abspath(directory)
if directory.startswith("\\\\"):
directory = "\\\\?\\UNC\\" + directory[2:]
else:
directory = "\\\\?\\" + directory

# abspath() in Python 3.7+ removes trailing path separators (#402)
if directory[-1] != sep:
directory += sep

directory = self._extended_path(directory)
self.realdirectory = directory

def _extended_path(self, path):
# Enable longer-than-260-character paths
path = os.path.abspath(path)
if not path.startswith("\\\\"):
path = "\\\\?\\" + path
elif not path.startswith("\\\\?\\"):
path = "\\\\?\\UNC\\" + path[2:]

# abspath() in Python 3.7+ removes trailing path separators (#402)
if path[-1] != os.sep:
return path + os.sep
return path

def set_filename(self, kwdict):
"""Set general filename data"""
self.kwdict = kwdict
Expand Down
5 changes: 4 additions & 1 deletion gallery_dl/postprocessor/metadata.py
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,10 @@ def run(self, pathfmt):
if archive and archive.check(pathfmt.kwdict):
return

directory = self._directory(pathfmt)
if util.WINDOWS and pathfmt.extended:
directory = pathfmt._extended_path(self._directory(pathfmt))
else:
directory = self._directory(pathfmt)
path = directory + self._filename(pathfmt)

if self.skip and os.path.exists(path):
Expand Down

0 comments on commit eef5beb

Please sign in to comment.