< Previous by Date | Date Index | Next by Date > |
< Previous in Thread | Thread Index | Next in Thread > |
Hmm, probably not; looking at MultipartMixedContents
we probably need a fairly expensive special case copy when the content-type is message/sipfrag
or message/external. It should be easy to reproduce&fix. -Derek From: Byron Campen
[mailto:bcampen@xxxxxxxxxxxx] Yes,
but is this code safe when you have a sipfrag in a multipart-mixed payload? Best regards, Byron Campen
Yes; the transport classes use
MsgHeaderScanner::allocateBuffer(int size) to guarantee that there are 5 extra
bytes at the end of each buffer. I do not know of any memory problems as a
result of this with the reciprocate transports. -Derek From:
resiprocate-devel-bounces@xxxxxxxxxxxxxxxxxxx [mailto:resiprocate-devel-bounces@xxxxxxxxxxxxxxxxxxx]
On Behalf Of Byron Campen
Good eye. Your solution sounds about as optimal as can be managed. Best regards, Byron Campen Hi, I found this in
SipFrag.cxx: const char *constBuffer =
pb.position(); // than size
bytes of the message.
msgHeaderScanner.prepareForFrag(mMessage, hasStartLine(buffer, size)); char
saveTermCharArray[sentinelLength]; saveTermCharArray[0]
= termCharArray[0]; saveTermCharArray[2]
= termCharArray[2]; termCharArray[0] = '\r'; termCharArray[2] = '\r'; char
*scanTermCharPtr;
msgHeaderScanner.scanChunk(buffer,
&scanTermCharPtr); termCharArray[1] =
saveTermCharArray[1]; termCharArray[3] =
saveTermCharArray[3]; The problem with this
code is that the sentinel is wrote *behind*
the ParseBuffer. If the ParseBuffer stands at the very end of an allocated
buffer, this code writes 4 bytes behind it. So it happened in our application.
As a consequence a further allocation of memory inside of scanChunk() failed
– probably because some administration information of the memory heap was
overwritten. I can easily reproduce
this using the gflags tool of the Mircosoft debugging tools. My solution consists in
allocating a new buffer that has the required size (+4), copying the content of
the ParseBuffer to it. The new buffer is referenced by the |