diff options
author | Calvin Buckley <calvin@cmpct.info> | 2019-11-25 10:52:54 +0300 |
---|---|---|
committer | Ryan Lucia <rylucia@microsoft.com> | 2019-11-25 10:52:54 +0300 |
commit | 004fd06b967e0d2fd0e28bc516e8e33fe8a75a21 (patch) | |
tree | c2895714d2a09813ecc1fbe7985b1e851cd1580a | |
parent | a3f4def8b6951fed5c248bd1875e90a7ab748d15 (diff) |
[eglib] In AIX/generic POSIX, handle null addresses better (#17892)
Fixes crash in tests on AIX.
Matches b0d966bd7ab887f075f6ce3d1c9858af6b52f30f
-rw-r--r-- | mono/eglib/gmodule-aix.c | 16 | ||||
-rw-r--r-- | mono/eglib/gmodule-unix.c | 8 |
2 files changed, 18 insertions, 6 deletions
diff --git a/mono/eglib/gmodule-aix.c b/mono/eglib/gmodule-aix.c index ab270e3797f..3af47088c81 100644 --- a/mono/eglib/gmodule-aix.c +++ b/mono/eglib/gmodule-aix.c @@ -219,12 +219,20 @@ g_module_address (void *addr, char *file_name, size_t file_name_len, /* This zero-on-failure is unlike other Unix APIs. */ if (ret == 0) return FALSE; - if (file_name != NULL && file_name_len >= 1) - g_strlcpy(file_name, dli.dli_fname, file_name_len); + if (file_name != NULL && file_name_len >= 1) { + if (dli.dli_fname != NULL) + g_strlcpy(file_name, dli.dli_fname, file_name_len); + else + file_name [0] = '\0'; + } if (file_base != NULL) *file_base = dli.dli_fbase; - if (sym_name != NULL && sym_name_len >= 1) - g_strlcpy(sym_name, dli.dli_sname, sym_name_len); + if (sym_name != NULL && sym_name_len >= 1) { + if (dli.dli_sname != NULL) + g_strlcpy(sym_name, dli.dli_sname, sym_name_len); + else + sym_name [0] = '\0'; + } if (sym_addr != NULL) *sym_addr = dli.dli_saddr; return TRUE; diff --git a/mono/eglib/gmodule-unix.c b/mono/eglib/gmodule-unix.c index 3f60af255f9..24b3a3023b1 100644 --- a/mono/eglib/gmodule-unix.c +++ b/mono/eglib/gmodule-unix.c @@ -94,8 +94,12 @@ g_module_address (void *addr, char *file_name, size_t file_name_len, /* * AIX/Win32 return non-const, so we use caller-allocated bufs instead */ - if (file_name != NULL && file_name_len >= 1) - g_strlcpy(file_name, dli.dli_fname, file_name_len); + if (file_name != NULL && file_name_len >= 1) { + if (dli.dli_fname) + g_strlcpy(file_name, dli.dli_fname, file_name_len); + else + file_name [0] = '\0'; + } if (file_base != NULL) *file_base = dli.dli_fbase; if (sym_name != NULL && sym_name_len >= 1) { |