[ https://issues.apache.org/jira/browse/WSCOMMONS-328?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Andreas Veithen resolved WSCOMMONS-328. --------------------------------------- Resolution: Fixed Fix Version/s: Axiom 1.2.8 Assignee: Andreas Veithen Actually the condition "foundAt + boundary.length > end" is never true, so the entire if statement should be removed. I added a unit test that confirms your analysis and fixed the code. Thanks for spotting this issue! > 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 > Assignee: Andreas Veithen > Fix For: Axiom 1.2.8 > > > org.apache.axiom.attachments.BoundaryPushbackInputStream > 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.