[
https://issues.apache.org/jira/browse/AXIS2C-933?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Bill Mitchell updated AXIS2C-933:
---------------------------------
Attachment: diff2.txt
I agree, Supun, that I misunderstood the buffs variable as accumulating the
size of all the buffers to date. It is in fact the size of just this buffer.
And, although I understood the logic of copying the start of the token from the
last buffer to the new buffer, I was imagining only the easy case of a short
token, where another buffer of the same size works fine. The doubling in size
handles the unusual case when a large amount of element content must be copied
from the previous buffer.
I suspected, after I wrote up the issue, that it was better seen from the last
problem forward. As I was unintentionally testing the path of an incomplete
message from the service, the core issue is that there are several while loops
in guththila that do not exit on end-of-file. So they continue to call
guththila_next_char. This infinite loop leads to a secondary failure, as
guththila_next_char will allocate another buffer, double in size, on each
attempt to read at end-of-file. Eventually this memory allocation fails, but
as guththila does not check for memory allocation failure, the ending symptom
is a seg fault in the buffer management logic.
Attached is a revised version of the first patch, that leaves the buffer
doubling logic intact, but remedies all the other issues I described and
addressed in the first patch.
Having implemented a fix for this, I discovered that the fact that the message
is incomplete gets lost in the upper layers, so the client ends up seeing a
partial message as if it is the entire message. But that is a different issue
that can be addressed separately.
> guththila parser fails when incoming message longer than 16984 characters
> -------------------------------------------------------------------------
>
> Key: AXIS2C-933
> URL: https://issues.apache.org/jira/browse/AXIS2C-933
> Project: Axis2-C
> Issue Type: Bug
> Components: guththila
> Affects Versions: Current (Nightly)
> Environment: Windows XP, Visual Studio 2005, guththila, libcurl
> Reporter: Bill Mitchell
> Attachments: diff.txt, diff2.txt
>
>
> The code in the guththila parser has a couple of problems when the first
> allocated buffer fills up and it attempts to read more data. First, when
> allocating another buffer it doubled the size of all the buffers allocated to
> this point, but then recorded the new buffer size as only equal to the size
> of all the previous buffers. Second, after fixing the buffer allocation
> issue, I discovered that the read into the buffer tried to read as much as
> all the buffers to date, instead of just the amount remaining in the buffer
> just allocated. There is also a subtle problem in the guththila_next_no_char
> routine if last_start is not set, that it did not assure that all the
> characters since next are moved to the newly allocated buffer.
> While debugging this, because of other issues, I walked through the path of
> an unexpected EOF in the middle of the incoming message, and discovered that
> several while loops in the parser do not stop on EOF, but just keep reading
> and reading and reading...
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]