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 <tom@tromey.com>
This commit is contained in:
Hannes Domani
2024-10-27 19:30:38 +01:00
parent 2930265f05
commit f951f2dbb8

View File

@@ -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);