From 5a1824ebe1fcdeff86b57a13a33d6428e89e4bce Mon Sep 17 00:00:00 2001 From: Pierre Bourdon Date: Fri, 17 May 2024 02:02:48 +0200 Subject: derived-path: refuse built derived path with a non-derivation base Example: /nix/store/dr53sp25hyfsnzjpm8mh3r3y36vrw3ng-neovim-0.9.5^out This is nonsensical since selecting outputs can only be done for a buildable derivation, not for a realised store path. The build worker side of things ends up crashing with an assertion when trying to handle such malformed paths. Change-Id: Ia3587c71fe3da5bea45d4e506e1be4dd62291ddf --- tests/unit/libstore/derived-path.cc | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'tests') diff --git a/tests/unit/libstore/derived-path.cc b/tests/unit/libstore/derived-path.cc index c62d79a78..ffa541e9f 100644 --- a/tests/unit/libstore/derived-path.cc +++ b/tests/unit/libstore/derived-path.cc @@ -77,6 +77,15 @@ TEST_F(DerivedPathTest, built_built_xp) { MissingExperimentalFeature); } +/** + * Built paths with a non-derivation base should fail parsing. + */ +TEST_F(DerivedPathTest, non_derivation_base) { + ASSERT_THROW( + DerivedPath::parse(*store, "/nix/store/g1w7hy3qg1w7hy3qg1w7hy3qg1w7hy3q-x^foo"), + InvalidPath); +} + #ifndef COVERAGE RC_GTEST_FIXTURE_PROP( -- cgit v1.2.3