Jason Smith wrote: > Trying again. What's the trick to getting past the Apache spam filter????
Generally, use plain text rather than html. Don't use attachments. Mark > > From: Jason Smith > Sent: Monday, April 06, 2009 11:38 AM > To: 'dev@tomcat.apache.org' > Subject: RE: Help with a Tomcat bug. > > Trying again. Spam filter seems to hate me. > > From: Jason Smith > Sent: Monday, April 06, 2009 11:08 AM > To: 'dev@tomcat.apache.org' > Subject: RE: Help with a Tomcat bug. > > More info. In InternalInputBuffer.nextRequest(), I noticed there is code to > pull remaining bytes into the current buffer before switching. > > /** > * End processing of current HTTP request. > * Note: All bytes of the current request should have been already > * consumed. This method only resets all the pointers so that we are ready > * to parse the next HTTP request. > */ > public void nextRequest() > throws IOException { > > // Recycle Request object > request.recycle(); > > // Determine the header buffer used for next request > byte[] newHeaderBuf = null; > if (buf == headerBuffer1) { > newHeaderBuf = headerBuffer2; > } else { > newHeaderBuf = headerBuffer1; > } > > // Copy leftover bytes from buf to newHeaderBuf > System.arraycopy(buf, pos, newHeaderBuf, 0, lastValid - pos); > if(lastValid-pos > 0) > { > > System.out.println("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"); > System.out.println("'" + new String(Arrays.copyOf(newHeaderBuf, > lastValid - pos), "US-ASCII") + "'"); > } > > // Swap buffers > buf = newHeaderBuf; > > // Recycle filters > for (int i = 0; i <= lastActiveFilter; i++) { > activeFilters[i].recycle(); > } > > // Reset pointers > lastValid = lastValid - pos; > pos = 0; > lastActiveFilter = -1; > parsingHeader = true; > swallowInput = true; > > } > > I am seeing something like this at one point: > > @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ > 'POST /dh/services/jmap/__exists__ HTTP/1.1 > > But I am also seeing this where this problem is cropping up: > > @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ > '0 > > ' > > Anyone got any ideas on how to fix this? Data from one POST is being carried > over to the next POST!!!!! > > From: Jason Smith > Sent: Monday, April 06, 2009 10:16 AM > To: 'dev@tomcat.apache.org' > Subject: Help with a Tomcat bug. > > When using .setChunkedStreamingMode(...) from the client, I was getting back > an invalid method name in my servlet. Specifically, in the overridden > service() method, the request.getMethod() was returning '0\n\nPOST'. > > I've tracked this all the way into > org.apache.coyote.http11.InternalInputBuffer. > > In .parseRequestLine, the first thing it does is consume leading CRs and LFs. > Well, the first line I am getting is '0\n'. So it won't consume that line. > > The next step parses to the next SPACE character. So it picks up the 0, the > CRs and LFs, all the way to the end of POST. > > The bottom line is that at this point, in this method, the HTTP method name > is already messed up. > > Should this be fixed in this method, or is there a better place? > > One quick fix: > > byte chr = 0; > do { > > // Read new bytes if needed > if (pos >= lastValid) { > if (!fill()) > throw new EOFException(sm.getString("iib.eof.error")); > } > > chr = buf[pos++]; > > } while ((chr == Constants.CR) || (chr == Constants.LF) || (chr == > '0')); > > > I simply check for the '0' character as well. This is a bit of a hack, but I > don't know the code well enough to know if the leading '0' (which I believe > is the last line from a previous chunked POST) is supposed to be there or not. > > Any help would be appreciated. > > Tomcat 5.5.27, Java 6u13. > > Jason Smith > Software Engineer > InfoTrust Group, Inc. > > --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org