From: Hannes Domani Date: Sun, 27 Oct 2024 18:30:38 +0000 (+0100) Subject: Don't copy memory for arguments if there are none X-Git-Tag: gdb-16-branchpoint~577 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f951f2dbb8f57fa6469a6935116a31004c7e373a;p=thirdparty%2Fbinutils-gdb.git Don't copy memory for arguments if there are none If amd64_windows_push_arguments is called with no arguments, then ARGS can be NULL, and inside the passed-by-pointer block, memcpy is called with this NULL, which is undefined behavior. So this just disable the passed-by-pointer block if there are no arguments. Fixes the following ubsan error: C:/gdb/src/gdb.git/gdb/amd64-windows-tdep.c:244:12: runtime error: null pointer passed as argument 2, which is declared to never be null Approved-By: Tom Tromey --- diff --git a/gdb/amd64-windows-tdep.c b/gdb/amd64-windows-tdep.c index 29a1f60d787..3ba2d1a7577 100644 --- a/gdb/amd64-windows-tdep.c +++ b/gdb/amd64-windows-tdep.c @@ -238,6 +238,7 @@ amd64_windows_push_arguments (struct regcache *regcache, int nargs, These arguments are replaced by pointers to a copy we are making in inferior memory. So use a copy of the ARGS table, to avoid modifying the original one. */ + if (nargs > 0) { struct value **args1 = XALLOCAVEC (struct value *, nargs);