You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by mi...@apache.org on 2017/03/25 07:54:53 UTC
olingo-odata2 git commit: [OLINGO-1097] Failure while parsing HTTP
header fields joined by multiple whitespaces
Repository: olingo-odata2
Updated Branches:
refs/heads/master 2d07b9fa9 -> 456f4c641
[OLINGO-1097] Failure while parsing HTTP header fields joined by multiple whitespaces
Signed-off-by: mibo <mi...@apache.org>
Project: http://git-wip-us.apache.org/repos/asf/olingo-odata2/repo
Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata2/commit/456f4c64
Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata2/tree/456f4c64
Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata2/diff/456f4c64
Branch: refs/heads/master
Commit: 456f4c6416d7621cf8f0edbefffc51c3f7ffc07f
Parents: 2d07b9f
Author: Dmitry.Tretyakov <dt...@gmail.com>
Authored: Wed Mar 22 16:28:01 2017 +0300
Committer: mibo <mi...@apache.org>
Committed: Sat Mar 25 08:54:27 2017 +0100
----------------------------------------------------------------------
.../olingo/odata2/core/servlet/RestUtil.java | 8 ++++---
.../odata2/core/servlet/RestUtilTest.java | 25 ++++++++++++++++++++
2 files changed, 30 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/456f4c64/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/servlet/RestUtil.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/servlet/RestUtil.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/servlet/RestUtil.java
index 1bdb1dd..3ee30d0 100644
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/servlet/RestUtil.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/servlet/RestUtil.java
@@ -48,7 +48,9 @@ import org.apache.olingo.odata2.core.commons.ContentType;
import org.apache.olingo.odata2.core.commons.Decoder;
public class RestUtil {
- private static final String REG_EX_OPTIONAL_WHITESPACE = "\\s?";
+ // RFC 2616, 4.2: linear white space
+ private static final String REG_EX_OPTIONAL_WHITESPACE = "\\s*";
+ private static final String REG_EX_FIELD_VALUE_SEPARATOR = "," + REG_EX_OPTIONAL_WHITESPACE;
// RFC 2616, 3.9: qvalue = ("0"["." 0*3DIGIT]) | ("1"["." 0*3("0")])
private static final String REG_EX_QVALUE = "q=((?:1(?:\\.0{0,3})?)|(?:0(?:\\.[0-9]{0,3})?))";
@@ -145,7 +147,7 @@ public class RestUtil {
List<Locale> acceptLanguages = new ArrayList<Locale>();
TreeSet<Accept> acceptTree = getAcceptTree();
if (acceptableLanguageHeader != null && !acceptableLanguageHeader.isEmpty()) {
- List<String> list = Arrays.asList(acceptableLanguageHeader.split(",\\s?"));
+ List<String> list = Arrays.asList(acceptableLanguageHeader.split(REG_EX_FIELD_VALUE_SEPARATOR));
for (String acceptLanguage : list) {
Matcher matcher = REG_EX_ACCEPT_LANGUAGES_WITH_Q_FACTOR.matcher(acceptLanguage);
if (matcher.find()) {
@@ -180,7 +182,7 @@ public class RestUtil {
TreeSet<Accept> acceptTree = getAcceptTree();
List<String> acceptHeaders = new ArrayList<String>();
if (acceptHeader != null && !acceptHeader.isEmpty()) {
- List<String> list = Arrays.asList(acceptHeader.split(",\\s?"));
+ List<String> list = Arrays.asList(acceptHeader.split(REG_EX_FIELD_VALUE_SEPARATOR));
for (String accept : list) {
Matcher matcher = REG_EX_ACCEPT_WITH_Q_FACTOR.matcher(accept);
if (matcher.find()) {
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/456f4c64/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/servlet/RestUtilTest.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/servlet/RestUtilTest.java b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/servlet/RestUtilTest.java
index 233cba6..dae2d3a 100644
--- a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/servlet/RestUtilTest.java
+++ b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/servlet/RestUtilTest.java
@@ -56,4 +56,29 @@ public class RestUtilTest {
Assert.assertEquals("v2", result.get("some").get(1));
Assert.assertEquals("v", result.get("another").get(0));
}
+
+ @Test
+ public void testExtractAcceptHeaders() throws Exception {
+ // NuGet 4.0 client under .NET
+ List<String> result = RestUtil.extractAcceptHeaders("application/atom+xml, application/xml");
+ Assert.assertEquals(2, result.size());
+ Assert.assertEquals("application/atom+xml", result.get(0));
+ Assert.assertEquals("application/xml", result.get(1));
+
+ // NuGet 4.0 client under Mono
+ result = RestUtil.extractAcceptHeaders("application/atom+xml, application/xml");
+ Assert.assertEquals(2, result.size());
+ Assert.assertEquals("application/atom+xml", result.get(0));
+ Assert.assertEquals("application/xml", result.get(1));
+
+ // Chrome 56
+ result = RestUtil.extractAcceptHeaders(
+ "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
+ Assert.assertEquals(5, result.size());
+ Assert.assertEquals("text/html", result.get(0));
+ Assert.assertEquals("application/xhtml+xml", result.get(1));
+ Assert.assertEquals("application/xml", result.get(2));
+ Assert.assertEquals("image/webp", result.get(3));
+ Assert.assertEquals("*/*", result.get(4));
+ }
}
\ No newline at end of file