From 87783b3f60c27d3afdb20b782ec86503b2af1446 Mon Sep 17 00:00:00 2001 From: markt Date: Thu, 25 Aug 2011 14:45:13 +0000 Subject: [PATCH] Tweak the message validation. Body messages don't have terminators git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@1161584 13f79535-47bb-0310-9956-ffa450edef68 --- java/org/apache/coyote/ajp/AjpAprProcessor.java | 2 +- java/org/apache/coyote/ajp/AjpMessage.java | 18 ++++++++++++++++-- java/org/apache/coyote/ajp/AjpNioProcessor.java | 2 +- java/org/apache/coyote/ajp/AjpProcessor.java | 2 +- 4 files changed, 19 insertions(+), 5 deletions(-) diff --git a/java/org/apache/coyote/ajp/AjpAprProcessor.java b/java/org/apache/coyote/ajp/AjpAprProcessor.java index 6ccbeab15..078f2b6ab 100644 --- a/java/org/apache/coyote/ajp/AjpAprProcessor.java +++ b/java/org/apache/coyote/ajp/AjpAprProcessor.java @@ -372,7 +372,7 @@ public class AjpAprProcessor extends AbstractAjpProcessor { return false; } - bodyMessage.getBytes(bodyBytes); + bodyMessage.getBodyBytes(bodyBytes); empty = false; return true; } diff --git a/java/org/apache/coyote/ajp/AjpMessage.java b/java/org/apache/coyote/ajp/AjpMessage.java index 5bfd1a1b6..8986955a0 100644 --- a/java/org/apache/coyote/ajp/AjpMessage.java +++ b/java/org/apache/coyote/ajp/AjpMessage.java @@ -312,16 +312,30 @@ public class AjpMessage { public void getBytes(MessageBytes mb) { + doGetBytes(mb, true); + } + + public void getBodyBytes(MessageBytes mb) { + doGetBytes(mb, false); + } + + private void doGetBytes(MessageBytes mb, boolean terminated) { int length = getInt(); if ((length == 0xFFFF) || (length == -1)) { mb.recycle(); return; } - validatePos(pos + length + 1); + if (terminated) { + validatePos(pos + length + 1); + } else { + validatePos(pos + length); + } mb.setBytes(buf, pos, length); mb.getCharChunk().recycle(); // not valid anymore pos += length; - pos++; // Skip the terminating \0 + if (terminated) { + pos++; // Skip the terminating \0 + } } diff --git a/java/org/apache/coyote/ajp/AjpNioProcessor.java b/java/org/apache/coyote/ajp/AjpNioProcessor.java index f6500a166..f1669dd96 100644 --- a/java/org/apache/coyote/ajp/AjpNioProcessor.java +++ b/java/org/apache/coyote/ajp/AjpNioProcessor.java @@ -378,7 +378,7 @@ public class AjpNioProcessor extends AbstractAjpProcessor { return false; } - bodyMessage.getBytes(bodyBytes); + bodyMessage.getBodyBytes(bodyBytes); empty = false; return true; } diff --git a/java/org/apache/coyote/ajp/AjpProcessor.java b/java/org/apache/coyote/ajp/AjpProcessor.java index 543f89fa6..376327c5f 100644 --- a/java/org/apache/coyote/ajp/AjpProcessor.java +++ b/java/org/apache/coyote/ajp/AjpProcessor.java @@ -335,7 +335,7 @@ public class AjpProcessor extends AbstractAjpProcessor { return false; } - bodyMessage.getBytes(bodyBytes); + bodyMessage.getBodyBytes(bodyBytes); empty = false; return true; } -- 2.11.0