Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCalvin Buckley <calvin@cmpct.info>2019-11-25 10:52:54 +0300
committerRyan Lucia <rylucia@microsoft.com>2019-11-25 10:52:54 +0300
commit004fd06b967e0d2fd0e28bc516e8e33fe8a75a21 (patch)
treec2895714d2a09813ecc1fbe7985b1e851cd1580a
parenta3f4def8b6951fed5c248bd1875e90a7ab748d15 (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.c16
-rw-r--r--mono/eglib/gmodule-unix.c8
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) {