You are viewing a plain text version of this content. The canonical link for it is here.
Posted to c-dev@axis.apache.org by "Emanuel Norrbin (JIRA)" <ax...@ws.apache.org> on 2006/01/26 02:47:09 UTC

[jira] Commented: (AXISCPP-922) Resource leak in AttachmentHelper::extract_Attachment

    [ http://issues.apache.org/jira/browse/AXISCPP-922?page=comments#action_12364052 ] 

Emanuel Norrbin commented on AXISCPP-922:
-----------------------------------------

There is actually another leak just a few lines down for binary attachments.

Starting from line 93 in server\apache2\AttachmentHelper.cpp:

             char* binaryBody = new char[attachment.length() + 1];
             strcpy(binaryBody, attachment.c_str());
             pSoapAttachment->addBody(binaryBody);

A char[] is allocated on the first line but SoapAttachment ::addBody(char* pchBinaryBody)
does not take over the pointer, it allocates a new one and copies the argument.

So, either binaryBody should be deleted (using delete[]) or addBody should take a reference
to the pointer and make sure to delete it later. SInce addBody(xsd__base64Binary* objBody)
takes over the pointer maybe addBody(char* pchBinaryBody) should do so also for efficiency.

/Emanuel


> Resource leak in AttachmentHelper::extract_Attachment
> -----------------------------------------------------
>
>          Key: AXISCPP-922
>          URL: http://issues.apache.org/jira/browse/AXISCPP-922
>      Project: Axis-C++
>         Type: Bug
>   Components: Server - Deserialization
>     Versions:  1.6 Final
>  Environment: All platforms, this issue was found in nightly drop 24-Jan-2006 21:23 
>     Reporter: Emanuel Norrbin

>
> File: server\apache2\AttachmentHelper.cpp
> Method: void AttachmentHelper::extract_Attachment(char *pBuffer)
> Line: 88 - 89
> This is a very easy bug to spot and fix:
>             xsd__base64Binary*  base64_attachment = new xsd__base64Binary();
>             base64_attachment = AxisUtils::decodeFromBase64Binary(attach);		
> In Java this code would be fine but in C++ is is a resource leak,
> the first new is not needed since decodeFromBase64Binary will allocate the xsd__base64Binary.
> I suggest replacing the two lines with this one:
> xsd__base64Binary*  base64_attachment = AxisUtils::decodeFromBase64Binary(attach);
> /Emanuel

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira