Failure in boundaryPosition condition for checking position validity
--------------------------------------------------------------------

                 Key: WSCOMMONS-328
                 URL: https://issues.apache.org/jira/browse/WSCOMMONS-328
             Project: WS-Commons
          Issue Type: Bug
          Components: AXIOM
            Reporter: Csorba Zoltán


Following code searches for the boundary in the given buffer, and after 
skipSearch it validates the position whether the boundary extends the buffer 
limit.
The check condition is wrong, because rnBoundaryLen = boundary.length+2.  That 
means if the boundary is found at the end of the buffer, this condition fails 
although boundary is already in the buffer.

    protected int boundaryPosition(byte[] searchbuf, int start, int end) throws 
java.io.IOException  {

        if (skip == null) {
            skip = ByteSearch.getSkipArray(boundary, true);
        }
        int foundAt = ByteSearch.skipSearch(boundary, true,searchbuf, start, 
end, skip);

        // First find the boundary marker
        if (foundAt >= 0) {    // Something was found.
            if (foundAt + rnBoundaryLen > end) {                             
<-- THIS IS WRONG, SHOULD BE "if (foundAt + boundary.length > end) {"
                foundAt = -1;  // Not sure why this check is done
            }
        }
        
        // Backup 2 if the boundary is preceeded by /r/n
        // The /r/n are treated as part of the boundary
        if (foundAt >=2) {
            if (searchbuf[foundAt-2] == 13 &&
                searchbuf[foundAt-1] == 10) {
                foundAt = foundAt -2;
            }
        }

        return foundAt;
    }

This may cause problem in only one case: if there is one more character after 
mime boundary at the end of the search buffer, then boundaryPosition returns 
-1. As \r\n is prior to the boundary, the 'read' function appends '\r' to the 
read buffer. This results, that searchbuf in he next loop starts with 
"\nMIMEBoundary...", so '\n' will be appended to the read buffer also.
That means, an extra CRLF is written at the end of SOAP attachment in this case.

Using "if (foundAt + boundary.length > end) {" instead solves the problem.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to