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 2014/05/14 08:02:15 UTC

git commit: [OLINGO-284] Fixed content length calculation

Repository: olingo-odata2
Updated Branches:
  refs/heads/master f86e307fe -> a95331e5a


[OLINGO-284] Fixed content length calculation


Project: http://git-wip-us.apache.org/repos/asf/olingo-odata2/repo
Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata2/commit/a95331e5
Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata2/tree/a95331e5
Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata2/diff/a95331e5

Branch: refs/heads/master
Commit: a95331e5a89cfc012e383c6c4a575661df52a37b
Parents: f86e307
Author: Michael Bolz <mi...@apache.org>
Authored: Wed May 14 08:01:26 2014 +0200
Committer: Michael Bolz <mi...@apache.org>
Committed: Wed May 14 08:01:26 2014 +0200

----------------------------------------------------------------------
 .../apache/olingo/odata2/core/edm/EdmBinary.java   | 17 +++++++----------
 .../olingo/odata2/core/edm/EdmSimpleTypeTest.java  | 12 +++++++++---
 2 files changed, 16 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/a95331e5/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/EdmBinary.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/EdmBinary.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/EdmBinary.java
index 9922cb0..2cf5020 100644
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/EdmBinary.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/EdmBinary.java
@@ -70,22 +70,19 @@ public class EdmBinary extends AbstractSimpleType {
             :
             // In default representation, every three bytes are represented as four base-64 characters.
             // Additionally, there could be up to two padding "=" characters if the number of bytes is
-            // not a multiple of three, and there could be carriage return/line feed combinations.
-            facets.getMaxLength() >= value.length() * 3 / 4 - (value.endsWith("==") ? 2 : value.endsWith("=") ? 1 : 0)
-                - crlfLength(value);
+            // not a multiple of three, and there could be line feeds, possibly with carriage returns.
+            facets.getMaxLength() * 4L >= (value.length() - crlfLength(value)) * 3L
+                - (value.contains("==") ? 2 : value.contains("=") ? 1 : 0) * 4L;
   }
 
   private static int crlfLength(final String value) {
     int result = 0;
     int index = 0;
-    while (index >= 0) {
-      index = value.indexOf("\r\n", index);
-      if (index > 0) {
-        result++;
-        index++;
-      }
+    while ((index = value.indexOf('\n', index)) >= 0) {
+      result += index > 0 && value.charAt(index - 1) == '\r' ? 2 : 1;
+      index++;
     }
-    return result * 2;
+    return result;
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/a95331e5/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/edm/EdmSimpleTypeTest.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/edm/EdmSimpleTypeTest.java b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/edm/EdmSimpleTypeTest.java
index 9a80bce..7ddb197 100644
--- a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/edm/EdmSimpleTypeTest.java
+++ b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/edm/EdmSimpleTypeTest.java
@@ -1042,6 +1042,10 @@ public class EdmSimpleTypeTest extends BaseTest {
         getMaxLengthFacets(2), byte[].class)));
     assertTrue(Arrays.equals(binary, instance.valueOfString("qrvM\r\n3e7/\r\n", EdmLiteralKind.DEFAULT,
         getMaxLengthFacets(6), byte[].class)));
+    assertTrue(Arrays.equals(binary, instance.valueOfString("\nqrvM3e7/", EdmLiteralKind.DEFAULT,
+        getMaxLengthFacets(6), byte[].class)));
+    assertTrue(Arrays.equals(binary, instance.valueOfString("qrvM\n3e7/", EdmLiteralKind.DEFAULT,
+        getMaxLengthFacets(6), byte[].class)));
     assertTrue(Arrays.equals(binary, instance.valueOfString("qrvM3e7/", EdmLiteralKind.DEFAULT,
         getMaxLengthFacets(Integer.MAX_VALUE), byte[].class)));
     assertTrue(Arrays.equals(binary, instance.valueOfString("X'AABBCCDDEEFF'", EdmLiteralKind.URI,
@@ -1053,11 +1057,13 @@ public class EdmSimpleTypeTest extends BaseTest {
     assertTrue(Arrays.equals(binary, instance.valueOfString("X'AABBCCDDEEFF'", EdmLiteralKind.URI,
         getMaxLengthFacets(null), byte[].class)));
 
-    expectErrorInValueOfString(instance, "qrvM3e7/", EdmLiteralKind.DEFAULT, getMaxLengthFacets(3),
+    expectErrorInValueOfString(instance, "qrvM3e7/", EdmLiteralKind.DEFAULT, getMaxLengthFacets(5),
+        EdmSimpleTypeException.LITERAL_FACETS_NOT_MATCHED);
+    expectErrorInValueOfString(instance, "qrvM3e7/", EdmLiteralKind.JSON, getMaxLengthFacets(5),
         EdmSimpleTypeException.LITERAL_FACETS_NOT_MATCHED);
-    expectErrorInValueOfString(instance, "qrvM3e7/", EdmLiteralKind.JSON, getMaxLengthFacets(3),
+    expectErrorInValueOfString(instance, "binary'AABBCCDDEEFF'", EdmLiteralKind.URI, getMaxLengthFacets(5),
         EdmSimpleTypeException.LITERAL_FACETS_NOT_MATCHED);
-    expectErrorInValueOfString(instance, "binary'AABBCCDDEEFF'", EdmLiteralKind.URI, getMaxLengthFacets(3),
+    expectErrorInValueOfString(instance, "qrvM3e7/\r", EdmLiteralKind.DEFAULT, getMaxLengthFacets(6),
         EdmSimpleTypeException.LITERAL_FACETS_NOT_MATCHED);
 
     expectErrorInValueOfString(instance, "@", EdmLiteralKind.DEFAULT, null,