Author: mturk
Date: Thu Feb 18 16:44:57 2010
New Revision: 911481

URL: http://svn.apache.org/viewvc?rev=911481&view=rev
Log:
Make sure we favor the values from AjpMessage.processHeader. If the signature 
is invalid len can be any random number in that case

Modified:
    tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java
    tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.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=911481&r1=911480&r2=911481&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java Thu Feb 18 
16:44:57 2010
@@ -1112,8 +1112,10 @@
 
         first = false;
         bodyMessage.reset();
-        readMessage(bodyMessage, false, false);
-
+        if (!readMessage(bodyMessage, false, false)) {
+            // Invalid message
+            return false;
+        }
         // No data received.
         if (bodyMessage.getLen() == 0) {
             // just the header
@@ -1182,11 +1184,21 @@
             read(headerLength);
         }
         inputBuffer.get(message.getBuffer(), 0, headerLength);
-        message.processHeader();
-        read(message.getLen());
-        inputBuffer.get(message.getBuffer(), headerLength, message.getLen());
-
-        return true;
+        int messageLength = message.processHeader();
+        if (messageLength < 0) {
+            // Invalid AJP header signature
+            // TODO: Throw some exception and close the connection to frontend.
+            return false;
+        }
+        else if (messageLength == 0) {
+            // Zero length message.
+            return true;
+        }
+        else {
+            read(messageLength);
+            inputBuffer.get(message.getBuffer(), headerLength, messageLength);
+            return true;
+        }
 
     }
 

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=911481&r1=911480&r2=911481&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java Thu Feb 18 
16:44:57 2010
@@ -1062,8 +1062,10 @@
 
         first = false;
         bodyMessage.reset();
-        readMessage(bodyMessage);
-
+        if (!readMessage(bodyMessage)) {
+            // Invalid message
+            return false;
+        }
         // No data received.
         if (bodyMessage.getLen() == 0) {
             // just the header
@@ -1119,14 +1121,24 @@
         throws IOException {
 
         byte[] buf = message.getBuffer();
+        int headerLength = message.getHeaderLength();
 
-        read(buf, 0, message.getHeaderLength());
-
-        message.processHeader();
-        read(buf, message.getHeaderLength(), message.getLen());
-
-        return true;
+        read(buf, 0, headerLength);
 
+        int messageLength = message.processHeader();
+        if (messageLength < 0) {
+            // Invalid AJP header signature
+            // TODO: Throw some exception and close the connection to frontend.
+            return false;
+        }
+        else if (messageLength == 0) {
+            // Zero length message.
+            return true;
+        }
+        else {
+            read(buf, headerLength, messageLength);
+            return true;
+        }
     }
 
 



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to