You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by js...@apache.org on 2006/12/16 00:54:40 UTC

svn commit: r487722 - /incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/util/Logger.cpp

Author: jsdelfino
Date: Fri Dec 15 15:54:39 2006
New Revision: 487722

URL: http://svn.apache.org/viewvc?view=rev&rev=487722
Log:
Check length of log formatted output to avoid buffer overruns when logging XML documents for example. Changed the size of the pre-allocated buffer from 4096 to 256 as most messages are smaller than that, and added code to allocate bigger buffers from the heap.

Modified:
    incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/util/Logger.cpp

Modified: incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/util/Logger.cpp
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/util/Logger.cpp?view=diff&rev=487722&r1=487721&r2=487722
==============================================================================
--- incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/util/Logger.cpp (original)
+++ incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/util/Logger.cpp Fri Dec 15 15:54:39 2006
@@ -125,9 +125,19 @@
             {
                 va_list variableArguments;
                 va_start(variableArguments, msg);
-                char messageBuffer[4096];
-                vsprintf(messageBuffer, msg, variableArguments);
-                logWriter->log(0, pid, messageBuffer);
+                char messageBuffer[256];
+                int size = vsnprintf(messageBuffer, 256, msg, variableArguments);
+                if (size > 256)
+                {
+                    char* bigMessageBuffer = new char[size];
+                    vsnprintf(bigMessageBuffer, size, msg, variableArguments);
+                    logWriter->log(0, pid, bigMessageBuffer);
+                    delete bigMessageBuffer; 
+                }
+                else
+                {
+                    logWriter->log(0, pid, messageBuffer);
+                }
                 va_end(variableArguments);
             }
         }
@@ -137,9 +147,19 @@
             {
                 va_list variableArguments;
                 va_start(variableArguments, msg);
-                char messageBuffer[4096];
-                vsprintf(messageBuffer, msg, variableArguments);
-                logWriter->log(1, pid, messageBuffer);
+                char messageBuffer[256];
+                int size = vsnprintf(messageBuffer, 256, msg, variableArguments);
+                if (size > 256)
+                {
+                    char* bigMessageBuffer = new char[size];
+                    vsnprintf(bigMessageBuffer, size, msg, variableArguments);
+                    logWriter->log(1, pid, bigMessageBuffer);
+                    delete bigMessageBuffer; 
+                }
+                else
+                {
+                    logWriter->log(1, pid, messageBuffer);
+                }
                 va_end(variableArguments);
             }
         }
@@ -149,9 +169,19 @@
             {
                 va_list variableArguments;
                 va_start(variableArguments, msg);
-                char messageBuffer[4096];
-                vsprintf(messageBuffer, msg, variableArguments);
-                logWriter->log(2, pid, messageBuffer);
+                char messageBuffer[256];
+                int size = vsnprintf(messageBuffer, 256, msg, variableArguments);
+                if (size > 256)
+                {
+                    char* bigMessageBuffer = new char[size];
+                    vsnprintf(bigMessageBuffer, size, msg, variableArguments);
+                    logWriter->log(2, pid, bigMessageBuffer);
+                    delete bigMessageBuffer; 
+                }
+                else
+                {
+                    logWriter->log(2, pid, messageBuffer);
+                }
                 va_end(variableArguments);
             }
         }



---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org