aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/build.py
diff options
context:
space:
mode:
authorEli Schwartz <eschwartz93@gmail.com>2024-02-14 00:09:07 -0500
committerEli Schwartz <eschwartz93@gmail.com>2024-02-21 16:38:29 -0500
commit4e5df4b3b7e0db0c4ed174f8b2de53b9004a1c45 (patch)
treeb2cc02ee39bc3fc73b9513c5b3a506b9a511382e /mesonbuild/build.py
parent47acce8ec93ae73b5a95f3b21e35abb4b3c21f6a (diff)
downloadmeson-4e5df4b3b7e0db0c4ed174f8b2de53b9004a1c45.zip
meson-4e5df4b3b7e0db0c4ed174f8b2de53b9004a1c45.tar.gz
meson-4e5df4b3b7e0db0c4ed174f8b2de53b9004a1c45.tar.bz2
fix crash in generator.process() with an invalid preserve_path_from
This code cleverly tried to use a fancy new pathlib.Path method to get the os.path.commonpath of two paths and check whether one is inside the other. It failed pretty badly, because of a hidden secret of pathlib: it is designed to throw random exceptions at all times (except when building os.PathLike interfaces) instead of performing useful work. Return to `os.path`. In particular, before this change, we wanted to check if files are NOT in a subpath of `preserve_path_from`, and raise a meson "ERROR: xxx" in such a case. However, the code to check for it would raise a python ValueError if that was the case, so we never got to the properly formatted error.
Diffstat (limited to 'mesonbuild/build.py')
-rw-r--r--mesonbuild/build.py7
1 files changed, 5 insertions, 2 deletions
diff --git a/mesonbuild/build.py b/mesonbuild/build.py
index 066e6aa..7aea229 100644
--- a/mesonbuild/build.py
+++ b/mesonbuild/build.py
@@ -1800,8 +1800,11 @@ class Generator(HoldableObject):
@staticmethod
def is_parent_path(parent: str, trial: str) -> bool:
- relpath = pathlib.PurePath(trial).relative_to(parent)
- return relpath.parts[0] != '..' # For subdirs we can only go "down".
+ try:
+ common = os.path.commonpath((parent, trial))
+ except ValueError: # Windows on different drives
+ return False
+ return pathlib.PurePath(common) == pathlib.PurePath(parent)
def process_files(self, files: T.Iterable[T.Union[str, File, 'CustomTarget', 'CustomTargetIndex', 'GeneratedList']],
state: T.Union['Interpreter', 'ModuleState'],