You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@shindig.apache.org by jo...@apache.org on 2010/03/17 23:23:33 UTC
svn commit: r924526 - in /shindig/trunk/java/common/src:
main/java/org/apache/shindig/common/util/JsonConversionUtil.java
test/java/org/apache/shindig/common/util/JsonConversionUtilTest.java
Author: johnh
Date: Wed Mar 17 22:23:32 2010
New Revision: 924526
URL: http://svn.apache.org/viewvc?rev=924526&view=rev
Log:
Return verbatim String when converting overflow/truncated single-valued JSON data.
Issue identified by Louis Ryan.
Modified:
shindig/trunk/java/common/src/main/java/org/apache/shindig/common/util/JsonConversionUtil.java
shindig/trunk/java/common/src/test/java/org/apache/shindig/common/util/JsonConversionUtilTest.java
Modified: shindig/trunk/java/common/src/main/java/org/apache/shindig/common/util/JsonConversionUtil.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/common/src/main/java/org/apache/shindig/common/util/JsonConversionUtil.java?rev=924526&r1=924525&r2=924526&view=diff
==============================================================================
--- shindig/trunk/java/common/src/main/java/org/apache/shindig/common/util/JsonConversionUtil.java (original)
+++ shindig/trunk/java/common/src/main/java/org/apache/shindig/common/util/JsonConversionUtil.java Wed Mar 17 22:23:32 2010
@@ -190,8 +190,17 @@ public class JsonConversionUtil {
// Attempt to parse as an array of literals
JSONArray parsedArray = new JSONArray('[' + value + ']');
if (parsedArray.length() == 1) {
- // Not an array
- return parsedArray.get(0);
+ // Not an array.
+ Object obj = parsedArray.get(0);
+ if (obj instanceof Double && !obj.toString().equals(value)) {
+ // Numeric overflow or truncation occurred. ie. large int/long
+ // converted to Double with exponent or Double truncated.
+ // In Shindig we return this as a verbatim String to avoid
+ // loss of data on input, as with lengthy ID values consisting
+ // of only numbers.
+ return value;
+ }
+ return obj;
}
return parsedArray;
} catch (JSONException je) {
Modified: shindig/trunk/java/common/src/test/java/org/apache/shindig/common/util/JsonConversionUtilTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/common/src/test/java/org/apache/shindig/common/util/JsonConversionUtilTest.java?rev=924526&r1=924525&r2=924526&view=diff
==============================================================================
--- shindig/trunk/java/common/src/test/java/org/apache/shindig/common/util/JsonConversionUtilTest.java (original)
+++ shindig/trunk/java/common/src/test/java/org/apache/shindig/common/util/JsonConversionUtilTest.java Wed Mar 17 22:23:32 2010
@@ -55,6 +55,16 @@ public class JsonConversionUtilTest exte
@Test
public void testValueToJsonParsing()
throws Exception {
+ String longNumber = "108502345354398668456";
+ assertJsonEquals(JsonConversionUtil.convertToJsonValue(longNumber), longNumber);
+ String longDoubleOverflow = "108502345354398668456.1234";
+ assertJsonEquals(JsonConversionUtil.convertToJsonValue(longDoubleOverflow),
+ longDoubleOverflow);
+ String longDoubleFractionPart = "1.108502345354398668456108502345354398668456";
+ assertJsonEquals(JsonConversionUtil.convertToJsonValue(longDoubleFractionPart),
+ longDoubleFractionPart);
+ assertJsonEquals(JsonConversionUtil.convertToJsonValue("12345"), 12345);
+ assertJsonEquals(JsonConversionUtil.convertToJsonValue("12.345"), 12.345);
assertJsonEquals(JsonConversionUtil.convertToJsonValue("abc"), "abc");
assertJsonEquals(JsonConversionUtil.convertToJsonValue("\"a,b,c\""), "a,b,c");
assertJsonEquals(JsonConversionUtil.convertToJsonValue("true"), true);