improved wrapper function for vsnprintf()
authorHolger Schemel <holger.schemel@virtion.de>
Fri, 15 Nov 2024 20:12:24 +0000 (21:12 +0100)
committerHolger Schemel <holger.schemel@virtion.de>
Fri, 15 Nov 2024 20:12:24 +0000 (21:12 +0100)
src/libgame/misc.c

index 15c46411a1cdd35dca7c940db74d20def68a619e..5cc80f793b6c4333e441fed7a00dccba21dc47c2 100644 (file)
@@ -1252,11 +1252,20 @@ char *getStringToLower(const char *s)
 
 static char *getStringVPrint(char *format, va_list ap)
 {
-  char s[MAX_LINE_LEN];
+  char test[1];
 
-  vsnprintf(s, MAX_LINE_LEN, format, ap);      // may truncate output string
+  // determine required size of string to be printed
+  int size = vsnprintf(test, 1, format, ap);
 
-  return getStringCopy(s);
+  // check if something went wrong (should not happen)
+  if (size < 0)
+    size = MAX_LINE_LEN;
+
+  char *s = checked_malloc(size + 1);
+
+  vsnprintf(s, size + 1, format, ap);
+
+  return s;
 }
 
 char *getStringPrint(char *format, ...)