libcstore: Fix null deref in writeDebugInfo for non-directory NARs
When index-debug-info is enabled and the store path being copied is a regular file (not a directory), std::get_if<nar_index::Directory> returns nullptr since the NAR root is a File variant. The loop then immediately dereferences buildIdDir->contents on the null pointer, causing a segfault. Add a null check at the top of the loop to break early when the NAR root is not a directory. Change-Id: I3a6e792b84cc12c837ecaddf4fee889e1bcb6397
This commit is contained in:
@@ -221,6 +221,7 @@ try {
|
||||
|
||||
auto * buildIdDir = std::get_if<nar_index::Directory>(&narIndex);
|
||||
for (auto subdir : { "lib", "debug", ".build-id" }) {
|
||||
if (!buildIdDir) break;
|
||||
// get returns nullptr subdir does not exist, and std::get_if propagates it.
|
||||
buildIdDir = std::get_if<nar_index::Directory>(get(buildIdDir->contents, subdir));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user