From f135e368ef29dc8ffbbc40602b4455f5e8a85f30 Mon Sep 17 00:00:00 2001 From: Ville Lautanala Date: Fri, 9 Jul 2010 16:34:08 +0300 Subject: [PATCH] Fix handling of single non-escaping backslash character in JSON parser --- src/main/com/mongodb/util/JSON.java | 9 ++++----- src/test/com/mongodb/util/JSONTest.java | 4 ++++ 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/main/com/mongodb/util/JSON.java b/src/main/com/mongodb/util/JSON.java index 92498772269..e68da9c6dda 100644 --- a/src/main/com/mongodb/util/JSON.java +++ b/src/main/com/mongodb/util/JSON.java @@ -489,15 +489,14 @@ else if(check('\"')) case '"': special = '\"'; break; case '\\': special = '\\'; break; } - + + buf.append(s.substring(start, pos-1)); if ( special != 0 ){ - buf.append(s.substring(start, pos-1)); pos++; buf.append( special ); - start = pos; - continue; } - + start = pos; + continue; } pos++; } diff --git a/src/test/com/mongodb/util/JSONTest.java b/src/test/com/mongodb/util/JSONTest.java index 90c6e43406a..f1dbdf809e4 100644 --- a/src/test/com/mongodb/util/JSONTest.java +++ b/src/test/com/mongodb/util/JSONTest.java @@ -243,6 +243,10 @@ public void testEscape1(){ x = (DBObject)JSON.parse( x.toString() ); assertEquals( thingy , x.get( "name" ) ); + assertEquals( "va/lue" , (String)JSON.parse("\"va\\/lue\"") ); + assertEquals( "value" , (String)JSON.parse("\"va\\lue\"") ); + assertEquals( "va\\lue" , (String)JSON.parse("\"va\\\\lue\"") ); + _escapeChar( "\t" ); _escapeChar( "\b" ); _escapeChar( "\n" );