Browse Source

dtoolutil: Fix UB when musl's dlinfo(RTLD_DI_LINKMAP) fails

Sam Edwards 6 years ago
parent
commit
83c10d1a0b
1 changed files with 9 additions and 9 deletions
  1. 9 9
      dtool/src/dtoolutil/executionEnvironment.cxx

+ 9 - 9
dtool/src/dtoolutil/executionEnvironment.cxx

@@ -610,16 +610,16 @@ read_args() {
 #else
 #else
     void *self = dlopen(NULL, RTLD_NOW | RTLD_NOLOAD);
     void *self = dlopen(NULL, RTLD_NOW | RTLD_NOLOAD);
 #endif
 #endif
-    dlinfo(self, RTLD_DI_LINKMAP, &map);
-
-    while (map != nullptr) {
-      const char *tail = strrchr(map->l_name, '/');
-      const char *head = strchr(map->l_name, '/');
-      if (tail && head && (strcmp(tail, "/libp3dtool.so." PANDA_ABI_VERSION_STR) == 0
-                        || strcmp(tail, "/libp3dtool.so") == 0)) {
-        _dtool_name = head;
+    if (dlinfo(self, RTLD_DI_LINKMAP, &map)) {
+      while (map != nullptr) {
+        const char *tail = strrchr(map->l_name, '/');
+        const char *head = strchr(map->l_name, '/');
+        if (tail && head && (strcmp(tail, "/libp3dtool.so." PANDA_ABI_VERSION_STR) == 0
+                          || strcmp(tail, "/libp3dtool.so") == 0)) {
+          _dtool_name = head;
+        }
+        map = map->l_next;
       }
       }
-      map = map->l_next;
     }
     }
   }
   }
 #endif
 #endif