Author: arielch
Date: Sun Mar 24 13:21:32 2013
New Revision: 1460356

URL: http://svn.apache.org/r1460356
Log:
i121926 - fix malformed PROPFIND/PROPPATCH request body

Modified:
    openoffice/trunk/main/ucb/source/ucp/webdav/SerfPropFindReqProcImpl.cxx
    openoffice/trunk/main/ucb/source/ucp/webdav/SerfPropPatchReqProcImpl.cxx

Modified: 
openoffice/trunk/main/ucb/source/ucp/webdav/SerfPropFindReqProcImpl.cxx
URL: 
http://svn.apache.org/viewvc/openoffice/trunk/main/ucb/source/ucp/webdav/SerfPropFindReqProcImpl.cxx?rev=1460356&r1=1460355&r2=1460356&view=diff
==============================================================================
--- openoffice/trunk/main/ucb/source/ucp/webdav/SerfPropFindReqProcImpl.cxx 
(original)
+++ openoffice/trunk/main/ucb/source/ucp/webdav/SerfPropFindReqProcImpl.cxx Sun 
Mar 24 13:21:32 2013
@@ -28,6 +28,8 @@
 
 #include "webdavresponseparser.hxx"
 #include <comphelper/seqstream.hxx>
+#include <rtl/ustrbuf.hxx>
+
 
 using namespace com::sun::star;
 
@@ -94,14 +96,20 @@ serf_bucket_t * SerfPropFindReqProcImpl:
 
     // body bucket - certain properties OR all properties OR only property 
names
     serf_bucket_t* body_bkt = 0;
-    rtl::OUString aBodyText;
+    rtl::OString aBodyText;
     {
+        // TODO is it really needed a Unicode string buffer?
+        // All properties and property names aren't supposed to be ASCII?
+        rtl::OUStringBuffer aBuffer;
+        aBuffer.appendAscii( RTL_CONSTASCII_STRINGPARAM( PROPFIND_HEADER ));
+
         // create and fill body bucket with requested properties
         const int nPropCount = ( !mbOnlyPropertyNames && mpPropNames )
                                ? mpPropNames->size() 
                                : 0;
         if ( nPropCount > 0 )
         {
+            aBuffer.appendAscii( RTL_CONSTASCII_STRINGPARAM( "<prop>" ) );
             SerfPropName thePropName;
             for ( int theIndex = 0; theIndex < nPropCount; theIndex ++ )
             {
@@ -110,34 +118,32 @@ serf_bucket_t * SerfPropFindReqProcImpl:
                                                    thePropName );
 
                 /* <*propname* xmlns="*propns*" /> */
-                aBodyText += rtl::OUString::createFromAscii( "<" );
-                aBodyText += rtl::OUString::createFromAscii( thePropName.name 
);
-                aBodyText += rtl::OUString::createFromAscii( " xmlnx=\"" );
-                aBodyText += rtl::OUString::createFromAscii( 
thePropName.nspace );
-                aBodyText += rtl::OUString::createFromAscii( "\"/>" );
+                aBuffer.appendAscii( RTL_CONSTASCII_STRINGPARAM( "<" ));
+                aBuffer.appendAscii( thePropName.name );
+                aBuffer.appendAscii( RTL_CONSTASCII_STRINGPARAM( " xmlnx=\"" 
));
+                aBuffer.appendAscii( thePropName.nspace );
+                aBuffer.appendAscii( RTL_CONSTASCII_STRINGPARAM( "\"/>" ));
             }
 
-            aBodyText = rtl::OUString::createFromAscii( "<prop>" ) + 
-                        aBodyText +
-                        rtl::OUString::createFromAscii( "</prop>" );
+            aBuffer.appendAscii( RTL_CONSTASCII_STRINGPARAM( "</prop>" ));
         }
         else
         {
             if ( mbOnlyPropertyNames )
             {
-                aBodyText = rtl::OUString::createFromAscii( "<propname/>" );
+                aBuffer.appendAscii( RTL_CONSTASCII_STRINGPARAM( "<propname/>" 
));
             }
             else
             {
-                aBodyText = rtl::OUString::createFromAscii( "<allprop/>" );
+                aBuffer.appendAscii( RTL_CONSTASCII_STRINGPARAM( "<allprop/>" 
));
             }
         }
 
-        aBodyText = rtl::OUString::createFromAscii( PROPFIND_HEADER ) + 
-                    aBodyText +
-                    rtl::OUString::createFromAscii( PROPFIND_TRAILER );
-        body_bkt = SERF_BUCKET_SIMPLE_STRING( rtl::OUStringToOString( 
aBodyText, RTL_TEXTENCODING_UTF8 ), 
-                                              pSerfBucketAlloc );
+        aBuffer.appendAscii( RTL_CONSTASCII_STRINGPARAM( PROPFIND_TRAILER ));
+        aBodyText = rtl::OUStringToOString( aBuffer.makeStringAndClear(), 
RTL_TEXTENCODING_UTF8 );
+        body_bkt = serf_bucket_simple_copy_create( aBodyText.getStr(),
+                                                   aBodyText.getLength(),
+                                                   pSerfBucketAlloc );
     }
 
     // create serf request

Modified: 
openoffice/trunk/main/ucb/source/ucp/webdav/SerfPropPatchReqProcImpl.cxx
URL: 
http://svn.apache.org/viewvc/openoffice/trunk/main/ucb/source/ucp/webdav/SerfPropPatchReqProcImpl.cxx?rev=1460356&r1=1460355&r2=1460356&view=diff
==============================================================================
--- openoffice/trunk/main/ucb/source/ucp/webdav/SerfPropPatchReqProcImpl.cxx 
(original)
+++ openoffice/trunk/main/ucb/source/ucp/webdav/SerfPropPatchReqProcImpl.cxx 
Sun Mar 24 13:21:32 2013
@@ -23,6 +23,7 @@
 #include "precompiled_ucb.hxx"
 
 #include <rtl/ustring.hxx>
+#include <rtl/ustrbuf.hxx>
 #include "DAVProperties.hxx"
 #include "UCBDeadPropertyValue.hxx"
 
@@ -53,20 +54,33 @@ serf_bucket_t * SerfPropPatchReqProcImpl
 
     // body bucket
     serf_bucket_t* body_bkt = 0;
-    rtl::OUString aBodyText;
+    rtl::OString aBodyText;
     {
         // create and fill body bucket with properties to be set or removed
-        static const char* OpCodes[2] = { "set", "remove" };
+        static const struct
+        {
+            const char *str;
+            sal_Int32   len;
+        }
+        OpCode [] = {
+            { RTL_CONSTASCII_STRINGPARAM( "set" ) },
+            { RTL_CONSTASCII_STRINGPARAM( "remove" ) }
+        };
         const int nPropCount = ( mpProperties != 0 )
                                ? mpProperties->size() 
                                : 0;
         if ( nPropCount > 0 )
         {
+            rtl::OUStringBuffer aBuffer;
+            // add PropPatch xml header in front
+            aBuffer.appendAscii( RTL_CONSTASCII_STRINGPARAM( PROPPATCH_HEADER 
));
+
             // <*operation code*><prop>
+
             ProppatchOperation lastOp = (*mpProperties)[ 0 ].operation;
-            aBodyText += rtl::OUString::createFromAscii( "<" );
-            aBodyText += rtl::OUString::createFromAscii( OpCodes[lastOp] );
-            aBodyText += rtl::OUString::createFromAscii( "><prop>" );
+            aBuffer.appendAscii( RTL_CONSTASCII_STRINGPARAM( "<" ));
+            aBuffer.appendAscii( OpCode[lastOp].str, OpCode[lastOp].len );
+            aBuffer.appendAscii( RTL_CONSTASCII_STRINGPARAM( "><prop>" ));
 
             SerfPropName thePropName;
             for ( int n = 0; n < nPropCount; ++n )
@@ -79,24 +93,24 @@ serf_bucket_t * SerfPropPatchReqProcImpl
                 if ( rProperty.operation != lastOp )
                 {
                     // </prop></*last operation code*><*operation code><prop>
-                    aBodyText += rtl::OUString::createFromAscii( "</prop></" );
-                    aBodyText += rtl::OUString::createFromAscii( 
OpCodes[lastOp] );
-                    aBodyText += rtl::OUString::createFromAscii( "><" );
-                    aBodyText += rtl::OUString::createFromAscii( 
OpCodes[rProperty.operation] );
-                    aBodyText += rtl::OUString::createFromAscii( "><prop>" );
+                    aBuffer.appendAscii( RTL_CONSTASCII_STRINGPARAM( 
"</prop></" ));
+                    aBuffer.appendAscii( OpCode[lastOp].str, 
OpCode[lastOp].len );
+                    aBuffer.appendAscii( RTL_CONSTASCII_STRINGPARAM( "><" ));
+                    aBuffer.appendAscii( OpCode[rProperty.operation].str, 
OpCode[rProperty.operation].len );
+                    aBuffer.appendAscii( RTL_CONSTASCII_STRINGPARAM( "><prop>" 
));
                 }
 
                 // <*propname* xmlns="*propns*"
-                aBodyText += rtl::OUString::createFromAscii( "<" );
-                aBodyText += rtl::OUString::createFromAscii( thePropName.name 
);
-                aBodyText += rtl::OUString::createFromAscii( " xmlns=\"" );
-                aBodyText += rtl::OUString::createFromAscii( 
thePropName.nspace );
-                aBodyText += rtl::OUString::createFromAscii( "\"" );
+                aBuffer.appendAscii( RTL_CONSTASCII_STRINGPARAM( "<" ));
+                aBuffer.appendAscii( thePropName.name );
+                aBuffer.appendAscii( RTL_CONSTASCII_STRINGPARAM( " xmlns=\"" 
));
+                aBuffer.appendAscii( thePropName.nspace );
+                aBuffer.appendAscii( RTL_CONSTASCII_STRINGPARAM( "\"" ));
 
                 if ( rProperty.operation == PROPSET )
                 {
                     // >*property value*</*propname*>
-                    aBodyText += rtl::OUString::createFromAscii( ">" );
+                    aBuffer.appendAscii( RTL_CONSTASCII_STRINGPARAM( ">" ));
 
                     rtl::OUString aStringValue;
                     if ( DAVProperties::isUCBDeadProperty( thePropName ) )
@@ -108,33 +122,32 @@ serf_bucket_t * SerfPropPatchReqProcImpl
                     {
                         rProperty.value >>= aStringValue;
                     }
-                    aBodyText += aStringValue;
-                    aBodyText += rtl::OUString::createFromAscii( "</" );
-                    aBodyText += rtl::OUString::createFromAscii( 
thePropName.name );
-                    aBodyText += rtl::OUString::createFromAscii( ">" );
+                    aBuffer.append( aStringValue );
+                    aBuffer.appendAscii( RTL_CONSTASCII_STRINGPARAM( "</" ));
+                    aBuffer.appendAscii( thePropName.name );
+                    aBuffer.appendAscii( RTL_CONSTASCII_STRINGPARAM( ">" ));
                 }
                 else
                 {
                     // />
-                    aBodyText += rtl::OUString::createFromAscii( "/>" );
+                    aBuffer.appendAscii( RTL_CONSTASCII_STRINGPARAM( "/>" ));
                 }
 
                 lastOp = rProperty.operation;
             }
 
             // </prop></*last operation code*>
-            aBodyText += rtl::OUString::createFromAscii( "</prop></" );
-            aBodyText += rtl::OUString::createFromAscii( OpCodes[lastOp] );
-            aBodyText += rtl::OUString::createFromAscii( ">" );
-
-            // add PropPatch xml header in front
-            aBodyText = rtl::OUString::createFromAscii( PROPPATCH_HEADER ) + 
aBodyText;
+            aBuffer.appendAscii( RTL_CONSTASCII_STRINGPARAM( "</prop></" ));
+            aBuffer.appendAscii( OpCode[lastOp].str, OpCode[lastOp].len );
+            aBuffer.appendAscii( RTL_CONSTASCII_STRINGPARAM( ">" ));
 
             // add PropPatch xml trailer at end
-            aBodyText += rtl::OUString::createFromAscii( PROPPATCH_TRAILER );
+            aBuffer.appendAscii( RTL_CONSTASCII_STRINGPARAM( PROPPATCH_TRAILER 
));
 
-            body_bkt = SERF_BUCKET_SIMPLE_STRING( rtl::OUStringToOString( 
aBodyText, RTL_TEXTENCODING_UTF8 ), 
-                                                  pSerfBucketAlloc );
+            aBodyText = rtl::OUStringToOString( aBuffer.makeStringAndClear(), 
RTL_TEXTENCODING_UTF8 );
+            body_bkt = serf_bucket_simple_copy_create( aBodyText.getStr(),
+                                                       aBodyText.getLength(),
+                                                       pSerfBucketAlloc );
         }
     }
 


Reply via email to