Browse Source

- Added some string-formatting safety on OSX & iOS. This stuff needs a serious clean-up however.

MelvMay-GG 12 years ago
parent
commit
17b5f9f
2 changed files with 17 additions and 4 deletions
  1. 8 2
      engine/source/platformOSX/osxString.mm
  2. 9 2
      engine/source/platformiOS/iOSStrings.mm

+ 8 - 2
engine/source/platformOSX/osxString.mm

@@ -413,20 +413,26 @@ int dVprintf(const char *format, void *arglist)
 
 //-----------------------------------------------------------------------------
 
-int dSprintf(char *buffer, dsize_t /*bufferSize*/, const char *format, ...)
+int dSprintf(char *buffer, dsize_t bufferSize, const char *format, ...)
 {
     va_list args;
     va_start(args, format);
     S32 len = vsprintf(buffer, format, args);
     
+    // Sanity!
+    AssertFatal(len <= bufferSize, "dSprintf - String format exceeded buffer size.  This will cause corruption.");
+    
     return (len);
 }
 
 //-----------------------------------------------------------------------------
 
-int dVsprintf(char *buffer, dsize_t /*bufferSize*/, const char *format, void *arglist)
+int dVsprintf(char *buffer, dsize_t bufferSize, const char *format, void *arglist)
 {
 	S32 len = vsprintf(buffer, format, (char*)arglist);
+
+    // Sanity!
+    AssertFatal(len <= bufferSize, "dSprintf - String format exceeded buffer size.  This will cause corruption.");
     
     return (len);
 }

+ 9 - 2
engine/source/platformiOS/iOSStrings.mm

@@ -329,19 +329,26 @@ int dVprintf(const char *format, void *arglist)
    return (len);
 }   
 
-int dSprintf(char *buffer, dsize_t /*bufferSize*/, const char *format, ...)
+int dSprintf(char *buffer, dsize_t bufferSize, const char *format, ...)
 {
    va_list args;
    va_start(args, format);
    S32 len = vsprintf(buffer, format, args);
 
+    // Sanity!
+    AssertFatal(len <= bufferSize, "dSprintf - String format exceeded buffer size.  This will cause corruption.");
+    
    return (len);
 }   
 
 
-int dVsprintf(char *buffer, dsize_t /*bufferSize*/, const char *format, void *arglist)
+int dVsprintf(char *buffer, dsize_t bufferSize, const char *format, void *arglist)
 {
 	S32 len = vsprintf(buffer, format, (char*)arglist);
+
+    // Sanity!
+    AssertFatal(len <= bufferSize, "dSprintf - String format exceeded buffer size.  This will cause corruption.");
+    
    return (len);
 }