Browse Source

Revert back to use sprintf() function in the ResourceCache class.
The more secure snprintf() function is not universally available.

Yao Wei Tjong 姚伟忠 9 years ago
parent
commit
ffa3a4bfac
2 changed files with 13 additions and 12 deletions
  1. 11 10
      Source/Urho3D/Resource/ResourceCache.cpp
  2. 2 2
      Source/Urho3D/Resource/ResourceCache.h

+ 11 - 10
Source/Urho3D/Resource/ResourceCache.cpp

@@ -912,11 +912,9 @@ void ResourceCache::ResetDependencies(Resource* resource)
     }
 }
 
-const String& ResourceCache::PrintMemoryUsage() const
+String ResourceCache::PrintMemoryUsage() const
 {
-    static String output;
-
-    output = "Resource Type                 Cnt       Avg       Max    Budget     Total\n\n";
+    String output = "Resource Type                 Cnt       Avg       Max    Budget     Total\n\n";
     char outputLine[256];
 
     unsigned totalResourceCt = 0;
@@ -950,9 +948,11 @@ const String& ResourceCache::PrintMemoryUsage() const
         const String memTotalString = GetFileSizeString(cit->second_.memoryUse_);
         const String resTypeName = context_->GetTypeName(cit->first_);
 
-        snprintf(outputLine, sizeof(outputLine), "%-28s %4s %9s %9s %9s %9s\n", resTypeName.CString(), countString.CString(),
-            memUseString.CString(), memMaxString.CString(), memBudgetString.CString(), memTotalString.CString());
-        output += (const char*)outputLine;
+        memset(outputLine, ' ', 256);
+        outputLine[255] = 0;
+        sprintf(outputLine, "%-28s %4s %9s %9s %9s %9s\n", resTypeName.CString(), countString.CString(), memUseString.CString(), memMaxString.CString(), memBudgetString.CString(), memTotalString.CString());
+
+        output += ((const char*)outputLine);
     }
 
     if (totalResourceCt > 0)
@@ -963,9 +963,10 @@ const String& ResourceCache::PrintMemoryUsage() const
     const String memMaxString = GetFileSizeString(totalLargest);
     const String memTotalString = GetFileSizeString(totalUse);
 
-    snprintf(outputLine, sizeof(outputLine), "%-28s %4s %9s %9s %9s %9s\n", "All", countString.CString(), memUseString.CString(),
-        memMaxString.CString(), "-", memTotalString.CString());
-    output += (const char*)outputLine;
+    memset(outputLine, ' ', 256);
+    outputLine[255] = 0;
+    sprintf(outputLine, "%-28s %4s %9s %9s %9s %9s\n", "All", countString.CString(), memUseString.CString(), memMaxString.CString(), "-", memTotalString.CString());
+    output += ((const char*)outputLine);
 
     return output;
 }

+ 2 - 2
Source/Urho3D/Resource/ResourceCache.h

@@ -207,8 +207,8 @@ public:
     /// Reset dependencies for a resource.
     void ResetDependencies(Resource* resource);
 
-    /// Returns a formatted string containing the memory actively used. This method is not thread-safe.
-    const String& PrintMemoryUsage() const;
+    /// Returns a formatted string containing the memory actively used.
+    String PrintMemoryUsage() const;
 
 private:
     /// Find a resource.