Return-Path: X-Original-To: apmail-tomcat-dev-archive@www.apache.org Delivered-To: apmail-tomcat-dev-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id BBD02898F for ; Mon, 22 Aug 2011 17:55:37 +0000 (UTC) Received: (qmail 7413 invoked by uid 500); 22 Aug 2011 17:55:36 -0000 Delivered-To: apmail-tomcat-dev-archive@tomcat.apache.org Received: (qmail 7254 invoked by uid 500); 22 Aug 2011 17:55:36 -0000 Mailing-List: contact dev-help@tomcat.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: "Tomcat Developers List" Delivered-To: mailing list dev@tomcat.apache.org Received: (qmail 7242 invoked by uid 99); 22 Aug 2011 17:55:35 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 22 Aug 2011 17:55:35 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 22 Aug 2011 17:55:34 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id CA15423889E3 for ; Mon, 22 Aug 2011 17:55:14 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1160347 - in /tomcat/trunk: java/org/apache/coyote/ajp/ test/org/apache/coyote/ajp/ Date: Mon, 22 Aug 2011 17:55:14 -0000 To: dev@tomcat.apache.org From: markt@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20110822175514.CA15423889E3@eris.apache.org> Author: markt Date: Mon Aug 22 17:55:14 2011 New Revision: 1160347 URL: http://svn.apache.org/viewvc?rev=1160347&view=rev Log: Ensure AjpMessage header is correct for the direction in which the message is being sent Modified: tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java tomcat/trunk/java/org/apache/coyote/ajp/AjpMessage.java tomcat/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java tomcat/trunk/test/org/apache/coyote/ajp/SimpleAjpClient.java tomcat/trunk/test/org/apache/coyote/ajp/TestAbstractAjpProcessor.java tomcat/trunk/test/org/apache/coyote/ajp/TesterAjpMessage.java Modified: tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java?rev=1160347&r1=1160346&r2=1160347&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java (original) +++ tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java Mon Aug 22 17:55:14 2011 @@ -463,7 +463,7 @@ public class AjpAprProcessor extends Abs read(headerLength); } inputBuffer.get(message.getBuffer(), 0, headerLength); - int messageLength = message.processHeader(); + int messageLength = message.processHeader(true); if (messageLength < 0) { // Invalid AJP header signature // TODO: Throw some exception and close the connection to frontend. Modified: tomcat/trunk/java/org/apache/coyote/ajp/AjpMessage.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AjpMessage.java?rev=1160347&r1=1160346&r2=1160347&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/ajp/AjpMessage.java (original) +++ tomcat/trunk/java/org/apache/coyote/ajp/AjpMessage.java Mon Aug 22 17:55:14 2011 @@ -348,13 +348,18 @@ public class AjpMessage { return buf.length; } - + @Deprecated public int processHeader() { + return processHeader(true); + } + + public int processHeader(boolean toContainer) { pos = 0; int mark = getInt(); len = getInt(); // Verify message signature - if ((mark != 0x1234) && (mark != 0x4142)) { + if ((toContainer && mark != 0x1234) || + (!toContainer && mark != 0x4142)) { log.error(sm.getString("ajpmessage.invalid", "" + mark)); if (log.isDebugEnabled()) { dump("In: "); Modified: tomcat/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java?rev=1160347&r1=1160346&r2=1160347&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java (original) +++ tomcat/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java Mon Aug 22 17:55:14 2011 @@ -465,7 +465,7 @@ public class AjpNioProcessor extends Abs return 0; } - int messageLength = message.processHeader(); + int messageLength = message.processHeader(true); if (messageLength < 0) { // Invalid AJP header signature throw new IOException(sm.getString("ajpmessage.invalidLength", Modified: tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java?rev=1160347&r1=1160346&r2=1160347&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java (original) +++ tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java Mon Aug 22 17:55:14 2011 @@ -414,7 +414,7 @@ public class AjpProcessor extends Abstra read(buf, 0, headerLength); - int messageLength = message.processHeader(); + int messageLength = message.processHeader(true); if (messageLength < 0) { // Invalid AJP header signature // TODO: Throw some exception and close the connection to frontend. Modified: tomcat/trunk/test/org/apache/coyote/ajp/SimpleAjpClient.java URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/coyote/ajp/SimpleAjpClient.java?rev=1160347&r1=1160346&r2=1160347&view=diff ============================================================================== --- tomcat/trunk/test/org/apache/coyote/ajp/SimpleAjpClient.java (original) +++ tomcat/trunk/test/org/apache/coyote/ajp/SimpleAjpClient.java Mon Aug 22 17:55:14 2011 @@ -149,7 +149,7 @@ public class SimpleAjpClient { read(is, buf, 0, headerLength); - int messageLength = message.processHeader(); + int messageLength = message.processHeader(false); if (messageLength < 0) { throw new IOException("Invalid AJP message length"); } else if (messageLength == 0) { Modified: tomcat/trunk/test/org/apache/coyote/ajp/TestAbstractAjpProcessor.java URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/coyote/ajp/TestAbstractAjpProcessor.java?rev=1160347&r1=1160346&r2=1160347&view=diff ============================================================================== --- tomcat/trunk/test/org/apache/coyote/ajp/TestAbstractAjpProcessor.java (original) +++ tomcat/trunk/test/org/apache/coyote/ajp/TestAbstractAjpProcessor.java Mon Aug 22 17:55:14 2011 @@ -101,7 +101,7 @@ public class TestAbstractAjpProcessor ex assertEquals((byte) 'B', message.buf[1]); // Set the start position and read the length - message.processHeader(); + message.processHeader(false); // Check the length assertTrue(message.len > 0); @@ -136,7 +136,7 @@ public class TestAbstractAjpProcessor ex assertEquals((byte) 'B', message.buf[1]); // Set the start position and read the length - message.processHeader(); + message.processHeader(false); // Should be a body chunk message assertEquals(0x03, message.readByte()); @@ -153,7 +153,7 @@ public class TestAbstractAjpProcessor ex assertEquals((byte) 'A', message.buf[0]); assertEquals((byte) 'B', message.buf[1]); - message.processHeader(); + message.processHeader(false); // Should be an end body message assertEquals(0x05, message.readByte()); Modified: tomcat/trunk/test/org/apache/coyote/ajp/TesterAjpMessage.java URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/coyote/ajp/TesterAjpMessage.java?rev=1160347&r1=1160346&r2=1160347&view=diff ============================================================================== --- tomcat/trunk/test/org/apache/coyote/ajp/TesterAjpMessage.java (original) +++ tomcat/trunk/test/org/apache/coyote/ajp/TesterAjpMessage.java Mon Aug 22 17:55:14 2011 @@ -67,4 +67,17 @@ public class TesterAjpMessage extends Aj return readString(len); } } + + @Override + public void end() { + len = pos; + int dLen = len - 4; + + buf[0] = (byte) 0x12; + buf[1] = (byte) 0x34; + buf[2] = (byte) ((dLen>>>8) & 0xFF); + buf[3] = (byte) (dLen & 0xFF); + } + + } --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org For additional commands, e-mail: dev-help@tomcat.apache.org