Skip to content

Commit 42e255d

Browse files
Fix invalid iteration of empty override path
Found by OSS-Fuzz
1 parent 35a62d3 commit 42e255d

3 files changed

Lines changed: 10 additions & 2 deletions

File tree

loader/loader.c

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4250,9 +4250,13 @@ VkResult get_override_layer_override_paths(struct loader_instance *inst, struct
42504250
for (uint32_t j = 0; j < prop->override_paths.count; j++) {
42514251
copy_data_file_info(prop->override_paths.list[j], NULL, 0, &cur_write_ptr);
42524252
}
4253+
4254+
// Subtract one from cur_write_ptr only if something was written so we can set the null terminator
4255+
if (*override_paths < cur_write_ptr) {
4256+
--cur_write_ptr;
4257+
assert(cur_write_ptr - (*override_paths) < (ptrdiff_t)override_path_size);
4258+
}
42534259
// Remove the last path separator
4254-
--cur_write_ptr;
4255-
assert(cur_write_ptr - (*override_paths) < (ptrdiff_t)override_path_size);
42564260
*cur_write_ptr = '\0';
42574261
loader_log(inst, VULKAN_LOADER_WARN_BIT | VULKAN_LOADER_LAYER_BIT, 0, "Override layer has override paths set to %s",
42584262
*override_paths);

tests/loader_fuzz_tests.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,10 @@ TEST(BadJsonInput, ClusterFuzzTestCase_6465902356791296) {
212212
// Causes an integer overflow - instance_enumerate_fuzzer: Integer-overflow in parse_value
213213
execute_instance_enumerate_fuzzer("clusterfuzz-testcase-minimized-instance_enumerate_fuzzer-6465902356791296");
214214
}
215+
TEST(BadJsonInput, ClusterFuzzTestCase_6740380288876544) {
216+
// Does crash with ASAN
217+
execute_instance_enumerate_fuzzer("clusterfuzz-testcase-minimized-instance_enumerate_fuzzer-6740380288876544");
218+
}
215219
TEST(BadJsonInput, ClusterFuzzTestCase_4512865114259456) {
216220
// Does crash with UBSAN and ASAN
217221
// malloc(): invalid size (unsorted)

0 commit comments

Comments
 (0)