Add safe_join for safely building filesystem paths.

Review Request #13166 — Created July 31, 2023 and submitted

Information

Djblets
release-4.x

Reviewers

This introduces djblets.util.filesystem.safe_join(), a port and
modernization of Django's internal django.utils._os.safe_join(). This
will join a series of paths and validate the result, making sure that
the resulting path is confined to the base path.

Our version also allows the result to be returned as a relative path,
and to use a specific pathing module (ntpath or posixpath). It also
provides type hints.

The main benefit is to avoid relying on an internal function that Django
may remove or substantially change at any time.

Unit tests pass.

Used this in some in-progress code.

Summary ID
Add safe_join for safely building filesystem paths.
This introduces `djblets.util.filesystem.safe_join()`, a port and modernization of Django's internal `django.utils._os.safe_join()`. This will join a series of paths and validate the result, making sure that the resulting path is confined to the base path. Our version also allows the result to be returned as a relative path, and to use a specific pathing module (`ntpath` or `posixpath`). It also provides type hints. The main benefit is to avoid relying on an internal function that Django may remove or substantially change at any time.
f22ba6c57e4d209780dd2fbd5fd215b79c984d77
david
  1. Ship It!
  2. 
      
chipx86
Review request changed
Status:
Completed
Change Summary:
Pushed to release-4.x (63d15c9)