From ebbf758b644a97e1778d60491deadb3c04bd1399 Mon Sep 17 00:00:00 2001 From: markt Date: Sat, 3 Mar 2007 15:56:14 +0000 Subject: [PATCH] Port fix from TC5. As per RFC2616, requests with multiple content-length headers are invalid. git-svn-id: https://svn.apache.org/repos/asf/tomcat/tc6.0.x/trunk@514176 13f79535-47bb-0310-9956-ffa450edef68 --- java/org/apache/coyote/Request.java | 2 +- java/org/apache/tomcat/util/http/MimeHeaders.java | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/java/org/apache/coyote/Request.java b/java/org/apache/coyote/Request.java index 21562754c..63c1e3d75 100644 --- a/java/org/apache/coyote/Request.java +++ b/java/org/apache/coyote/Request.java @@ -294,7 +294,7 @@ public final class Request { public long getContentLengthLong() { if( contentLength > -1 ) return contentLength; - MessageBytes clB = headers.getValue("content-length"); + MessageBytes clB = headers.getUniqueValue("content-length"); contentLength = (clB == null || clB.isNull()) ? -1 : clB.getLong(); return contentLength; diff --git a/java/org/apache/tomcat/util/http/MimeHeaders.java b/java/org/apache/tomcat/util/http/MimeHeaders.java index 1bb336205..4dd914764 100644 --- a/java/org/apache/tomcat/util/http/MimeHeaders.java +++ b/java/org/apache/tomcat/util/http/MimeHeaders.java @@ -293,6 +293,25 @@ public class MimeHeaders { return null; } + /** + * Finds and returns a unique header field with the given name. If no such + * field exists, null is returned. If the specified header field is not + * unique then an {@link IllegalArgumentException} is thrown. + */ + public MessageBytes getUniqueValue(String name) { + MessageBytes result = null; + for (int i = 0; i < count; i++) { + if (headers[i].getName().equalsIgnoreCase(name)) { + if (result == null) { + result = headers[i].getValue(); + } else { + throw new IllegalArgumentException(); + } + } + } + return result; + } + // bad shortcut - it'll convert to string ( too early probably, // encoding is guessed very late ) public String getHeader(String name) { -- 2.11.0