summaryrefslogtreecommitdiff
path: root/testsuite.py
diff options
context:
space:
mode:
authorUlf Magnusson <ulfalizer@gmail.com>2019-06-01 04:15:04 +0200
committerUlf Magnusson <ulfalizer@gmail.com>2019-06-01 06:21:54 +0200
commit92791a3fe15bb2d5c14039fbd531be73255f0c6d (patch)
treee9e103fa96678705797b906b69fdeee90b6a753f /testsuite.py
parentf60f05c0ea0fcd0557b4e8f29f3b9d9471d011dd (diff)
Fix obscure crash with rsource and $srctree pointing to a symlink
Sourcing a file with an absolute path and using rsource in it triggered a relpath() between the absolute path and $srctree. Since e.g. symlink/../bar/ = bar/ is not guaranteed for symlinks, this could lead to the rsource'd file not being found if $srctree pointed to a symlink. Switch to a simpler, more textual method for stripping $srctree from glob results, which should be robust against symlink shenanigans. This also makes the code a bit easier to follow. Discovered by Marc Herbert. Piggyback some minor cleanup.
Diffstat (limited to 'testsuite.py')
-rw-r--r--testsuite.py17
1 files changed, 14 insertions, 3 deletions
diff --git a/testsuite.py b/testsuite.py
index 9438863..376f165 100644
--- a/testsuite.py
+++ b/testsuite.py
@@ -1138,12 +1138,26 @@ tests/Krecursive2:1
else:
fail("'rsource' with missing file did not raise exception")
+ # Test a tricky case involving symlinks. $srctree is tests/symlink, which
+ # points to tests/sub/sub, meaning tests/symlink/.. != tests/. Previously,
+ # using 'rsource' from a file sourced with an absolute path triggered an
+ # unsafe relpath() with tests/symlink/.. in it, crashing.
+
+ os.environ["srctree"] = "Kconfiglib/tests/symlink"
+ os.environ["KCONFIG_SYMLINK_2"] = os.path.abspath(
+ "Kconfiglib/tests/sub/Kconfig_symlink_2")
+ if not os.path.isabs(
+ Kconfig("Kconfig_symlink_1").syms["FOUNDME"].nodes[0].filename):
+
+ fail("Symlink + rsource issues")
+
print("Testing Kconfig.node_iter()")
# Reuse tests/Klocation. The node_iter(unique_syms=True) case already gets
# plenty of testing from write_config() as well.
+ os.environ["srctree"] = "Kconfiglib"
c = Kconfig("tests/Klocation", warn=False)
verify_equal(
@@ -1169,9 +1183,6 @@ tests/Krecursive2:1
if not isinstance(node.item, Symbol)],
["choice", "menu", "comment"])
- # Get rid of custom 'srctree' from Klocation test
- os.environ.pop("srctree", None)
-
print("Testing MenuNode.include_path")