Loading...
interlinked-dylibs/Logging.cpp dyld-433.5 dyld-421.1
--- dyld/dyld-433.5/interlinked-dylibs/Logging.cpp
+++ dyld/dyld-421.1/interlinked-dylibs/Logging.cpp
@@ -32,6 +32,7 @@
 
 #include "Logging.h"
 
+#define MAX_LOG_STR_LEN (512)
 //const char* kDispatchQueueLogNameKey = "kDispatchQueueLogNameKey";
 const char* kDispatchWarningArrayKey = "kDispatchWarningArrayKey";
 
@@ -141,24 +142,27 @@
 
 void queued_print(FILE* __restrict fd, const char* str)
 {
+    const char* qstr = strdup(str);
+
     dispatch_async(getLogQueue(), ^{
-        (void)fprintf(fd, "%s", str);
-        free((void*)str);
+        (void)fprintf(fd, "%s", qstr);
+        free((void*)qstr);
     });
 }
 
 #define VLOG(header)                                                                 \
     va_list list;                                                                    \
     va_start(list, format);                                                          \
-    char *temp, *temp2;                                                              \
-    vasprintf(&temp, format, list);                                                  \
+    char temp[MAX_LOG_STR_LEN];                                                      \
+    vsprintf(temp, format, list);                                                    \
     auto ctx = getLoggingContext();                                                  \
+    char temp2[MAX_LOG_STR_LEN];                                                     \
     if (ctx && !ctx->name().empty()) {                                               \
-        asprintf(&temp2, "[%s] %s%s\n", ctx->name().c_str(), header, temp);          \
+        snprintf(temp2, MAX_LOG_STR_LEN, "[%s] %s%s\n", ctx->name().c_str(), header, \
+            temp);                                                                   \
     } else {                                                                         \
-        asprintf(&temp2, "%s%s\n", header, temp);                                    \
+        snprintf(temp2, MAX_LOG_STR_LEN, "%s%s\n", header, temp);                    \
     }                                                                                \
-    free(temp);                                                                      \
     queued_print(stderr, temp2);                                                     \
     va_end(list);
 
@@ -184,13 +188,14 @@
 
     va_list list;
     va_start(list, format);
-    char* blockTemp;
-    vasprintf(&blockTemp, format, list);
+    char temp[MAX_LOG_STR_LEN];
+    vsprintf(temp, format, list);
+    char* blockTemp = strdup(temp);
 
     auto ctx = getLoggingContext();
     if (ctx) {
         for (auto& target : ctx->targets().second) {
-            ctx->targets().first->configuration(target.first).architecture(target.second).results.warnings.push_back(blockTemp);
+            ctx->targets().first->configurations[target.first].architectures[target.second].results.warnings.push_back(blockTemp);
         }
     }
 
@@ -213,7 +218,7 @@
 
     if (ctx) {
         // We are a work in a logging context, throw
-        throw std::string(temp2);
+        throw std::string(temp);
     } else {
         // We are in general handing, let the loggging queue darain and exit
         dispatch_sync(getLogQueue(), ^{