You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by gs...@apache.org on 2010/05/28 09:51:49 UTC

svn commit: r949126 - /qpid/trunk/qpid/extras/sasl/src/cyrus/saslwrapper.cpp

Author: gsim
Date: Fri May 28 07:51:49 2010
New Revision: 949126

URL: http://svn.apache.org/viewvc?rev=949126&view=rev
Log:
Patch from Ted Ross to prevent sasl_decode overflow

Modified:
    qpid/trunk/qpid/extras/sasl/src/cyrus/saslwrapper.cpp

Modified: qpid/trunk/qpid/extras/sasl/src/cyrus/saslwrapper.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/extras/sasl/src/cyrus/saslwrapper.cpp?rev=949126&r1=949125&r2=949126&view=diff
==============================================================================
--- qpid/trunk/qpid/extras/sasl/src/cyrus/saslwrapper.cpp (original)
+++ qpid/trunk/qpid/extras/sasl/src/cyrus/saslwrapper.cpp Fri May 28 07:51:49 2010
@@ -252,14 +252,25 @@ bool ClientImpl::encode(const string& cl
 
 bool ClientImpl::decode(const string& cipherText, output_string& clearText)
 {
+    const char* input = cipherText.c_str();
+    unsigned int inLen = cipherText.size();
+    unsigned int remaining = inLen;
+    const char* cursor = input;
     const char* output;
     unsigned int outlen;
-    int result = sasl_decode(conn, cipherText.c_str(), cipherText.size(), &output, &outlen);
-    if (result != SASL_OK) {
-        setError("sasl_decode", result);
-        return false;
+
+    clearText = string();
+    while (remaining > 0) {
+        unsigned int segmentLen = (remaining < maxBufSize) ? remaining : maxBufSize;
+        int result = sasl_decode(conn, cursor, segmentLen, &output, &outlen);
+        if (result != SASL_OK) {
+            setError("sasl_decode", result);
+            return false;
+        }
+        clearText = clearText + string(output, outlen);
+        cursor += segmentLen;
+        remaining -= segmentLen;
     }
-    clearText = string(output, outlen);
     return true;
 }
 



---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:commits-subscribe@qpid.apache.org