[ 
https://issues.apache.org/jira/browse/AXIS2C-1469?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Damitha Kumarage resolved AXIS2C-1469.
--------------------------------------

    Fix Version/s: 1.7.0
       Resolution: Fixed

Applied the patch

> Array bounds read error in guththila_next_no_char()
> ---------------------------------------------------
>
>                 Key: AXIS2C-1469
>                 URL: https://issues.apache.org/jira/browse/AXIS2C-1469
>             Project: Axis2-C
>          Issue Type: Bug
>          Components: guththila
>    Affects Versions: 1.6.0
>         Environment: any
>            Reporter: Steve Jankowski
>             Fix For: 1.7.0
>
>
> When reading N characters at a buffer boundary, incorrect logic results in 
> reading one byte past the end of the buffer which leads to unpredictable 
> parse errors.
> Create an XML file > 16KB (16384) bytes and parse using guththila while 
> running under valgrind (I'm using valgrind 3.5).  Adjust the content around 
> the 16384th byte until you see an invalid read error from valgrind.  I added 
> and removed some character content.
> The 16KB value derives from the guththila buffer size 
> (GUTHTHILA_BUFFER_DEF_SIZE).  Decreasing this value (to 512 or 1024) may 
> result in regressions in existing guththila and axis2c test suites.  I'm 
> guessing there's very limited testing of XML messages > 16KB which is why 
> this bug has survived so long.
> The "if" statements in guththila_next_no_char() make incorrect use of the 
> "no" variable.  Here's the fix I applied:
> --- /home/steve/src/guththila-svn/src/guththila_xml_parser.c    2010-03-19 
> 12:13:45.000000000 -0700
> +++ guththila_xml_parser.c      2010-03-22 14:31:06.000000000 -0700
> @@ -1773,8 +1821,8 @@
>      }
>      else if(m->reader->type == GUTHTHILA_IO_READER || m->reader->type == 
> GUTHTHILA_FILE_READER)
>      {
> -        if(m->next < GUTHTHILA_BUFFER_PRE_DATA_SIZE(m->buffer)
> -            + GUTHTHILA_BUFFER_CURRENT_DATA_SIZE(m->buffer) + no && 
> m->buffer.cur_buff != -1)
> +        if(m->next + no <= GUTHTHILA_BUFFER_PRE_DATA_SIZE(m->buffer)
> +            + GUTHTHILA_BUFFER_CURRENT_DATA_SIZE(m->buffer) && 
> m->buffer.cur_buff != -1)
>          {
>              for(i = 0; i < no; i++)
>              {
> @@ -1784,8 +1832,8 @@
>              return (int)no;
>              /* We are sure that the difference lies within the int range */
>          }
> -        else if(m->next >= GUTHTHILA_BUFFER_PRE_DATA_SIZE(m->buffer)
> -            + GUTHTHILA_BUFFER_CURRENT_DATA_SIZE(m->buffer) + no && 
> m->buffer.cur_buff != -1)
> +        else if(m->next + no > GUTHTHILA_BUFFER_PRE_DATA_SIZE(m->buffer)
> +            + GUTHTHILA_BUFFER_CURRENT_DATA_SIZE(m->buffer) && 
> m->buffer.cur_buff != -1)
>          {
>              /* We are sure that the difference lies within the int range */
>              if(m->buffer.cur_buff == (int)m->buffer.no_buffers - 1)

-- 
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]

Reply via email to