Fixes this `-fsanitize=undefined` error: ``` test_x86_emulator.c:614:12: runtime error: null pointer passed as argument 1, which is declared to never be null /usr/include/string.h:44:28: note: nonnull attribute specified here SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior test_x86_emulator.c:614:12 ```
Although this is more of a grey area: I don't see anything in the standard that'd forbid calling `memset` with NULL and 0, but `glibc` does specify it as non-null, which allows the compiler to make optimizations assuming it never is NULL, so this is undefined behaviour only on glibc. Best to avoid the potential undefined behaviour though. Signed-off-by: Edwin Török <[email protected]> --- tools/tests/x86_emulator/test_x86_emulator.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tools/tests/x86_emulator/test_x86_emulator.c b/tools/tests/x86_emulator/test_x86_emulator.c index 3a03ea0352..87c1289afa 100644 --- a/tools/tests/x86_emulator/test_x86_emulator.c +++ b/tools/tests/x86_emulator/test_x86_emulator.c @@ -611,7 +611,8 @@ static int fetch( if ( verbose ) printf("** %s(CS:%p,, %u,)\n", __func__, (void *)offset, bytes); - memcpy(p_data, (void *)offset, bytes); + if (bytes) + memcpy(p_data, (void *)offset, bytes); return X86EMUL_OKAY; } -- 2.47.3
