diff options
-rw-r--r-- | ext/json/ext/generator/generator.c | 18 | ||||
-rw-r--r-- | java/src/json/ext/GeneratorState.java | 32 | ||||
-rw-r--r-- | lib/json/pure/generator.rb | 7 | ||||
-rwxr-xr-x | tests/test_json_generate.rb | 12 |
4 files changed, 3 insertions, 66 deletions
diff --git a/ext/json/ext/generator/generator.c b/ext/json/ext/generator/generator.c index 6300c64..0a3e920 100644 --- a/ext/json/ext/generator/generator.c +++ b/ext/json/ext/generator/generator.c @@ -915,21 +915,6 @@ static VALUE cState_partial_generate(VALUE self, VALUE obj) } /* - * This function returns true if string is either a JSON array or JSON object. - * It might suffer from false positives, e. g. syntactically incorrect JSON in - * the string or certain UTF-8 characters on the right hand side. - */ -static int isArrayOrObject(VALUE string) -{ - long string_len = RSTRING_LEN(string); - char *p = RSTRING_PTR(string), *q = p + string_len - 1; - if (string_len < 2) return 0; - for (; p < q && isspace((unsigned char)*p); p++); - for (; q > p && isspace((unsigned char)*q); q--); - return (*p == '[' && *q == ']') || (*p == '{' && *q == '}'); -} - -/* * call-seq: generate(obj) * * Generates a valid JSON document from object +obj+ and returns the @@ -940,9 +925,6 @@ static VALUE cState_generate(VALUE self, VALUE obj) { VALUE result = cState_partial_generate(self, obj); GET_STATE(self); - if (!state->quirks_mode && !isArrayOrObject(result)) { - rb_raise(eGeneratorError, "only generation of JSON objects or arrays allowed"); - } return result; } diff --git a/java/src/json/ext/GeneratorState.java b/java/src/json/ext/GeneratorState.java index 3065307..db4f3f5 100644 --- a/java/src/json/ext/GeneratorState.java +++ b/java/src/json/ext/GeneratorState.java @@ -208,10 +208,6 @@ public class GeneratorState extends RubyObject { @JRubyMethod public IRubyObject generate(ThreadContext context, IRubyObject obj) { RubyString result = Generator.generateJson(context, obj, this); - if (!quirksMode && !objectOrArrayLiteral(result)) { - throw Utils.newException(context, Utils.M_GENERATOR_ERROR, - "only generation of JSON objects or arrays allowed"); - } RuntimeInfo info = RuntimeInfo.forRuntime(context.getRuntime()); if (info.encodingsSupported()) { result.force_encoding(context, info.utf8.get()); @@ -219,34 +215,6 @@ public class GeneratorState extends RubyObject { return result; } - /** - * Ensures the given string is in the form "[...]" or "{...}", being - * possibly surrounded by white space. - * The string's encoding must be ASCII-compatible. - * @param value - * @return - */ - private static boolean objectOrArrayLiteral(RubyString value) { - ByteList bl = value.getByteList(); - int len = bl.length(); - - for (int pos = 0; pos < len - 1; pos++) { - int b = bl.get(pos); - if (Character.isWhitespace(b)) continue; - - // match the opening brace - switch (b) { - case '[': - return matchClosingBrace(bl, pos, len, ']'); - case '{': - return matchClosingBrace(bl, pos, len, '}'); - default: - return false; - } - } - return false; - } - private static boolean matchClosingBrace(ByteList bl, int pos, int len, int brace) { for (int endPos = len - 1; endPos > pos; endPos--) { diff --git a/lib/json/pure/generator.rb b/lib/json/pure/generator.rb index 225081f..cb27e04 100644 --- a/lib/json/pure/generator.rb +++ b/lib/json/pure/generator.rb @@ -294,13 +294,6 @@ module JSON result = obj.to_json(self) JSON.valid_utf8?(result) or raise GeneratorError, "source sequence #{result.inspect} is illegal/malformed utf-8" - unless @quirks_mode - unless result =~ /\A\s*\[/ && result =~ /\]\s*\Z/ || - result =~ /\A\s*\{/ && result =~ /\}\s*\Z/ - then - raise GeneratorError, "only generation of JSON objects or arrays allowed" - end - end result end diff --git a/tests/test_json_generate.rb b/tests/test_json_generate.rb index 2fe4760..79c00af 100755 --- a/tests/test_json_generate.rb +++ b/tests/test_json_generate.rb @@ -50,8 +50,7 @@ EOT assert_equal('{"1":2}', json) parsed_json = parse(json) assert_equal({"1"=>2}, parsed_json) - assert_raise(GeneratorError) { generate(666) } - assert_equal '666', generate(666, :quirks_mode => true) + assert_equal '666', generate(666) end def test_generate_pretty @@ -68,8 +67,7 @@ EOT EOT parsed_json = parse(json) assert_equal({"1"=>2}, parsed_json) - assert_raise(GeneratorError) { pretty_generate(666) } - assert_equal '666', pretty_generate(666, :quirks_mode => true) + assert_equal '666', pretty_generate(666) end def test_generate_custom @@ -94,8 +92,7 @@ EOT assert_equal('{"1":2}', json) parsed_json = parse(json) assert_equal({"1"=>2}, parsed_json) - assert_raise(GeneratorError) { fast_generate(666) } - assert_equal '666', fast_generate(666, :quirks_mode => true) + assert_equal '666', fast_generate(666) end def test_own_state @@ -108,9 +105,6 @@ EOT assert_equal('{"1":2}', json) parsed_json = parse(json) assert_equal({"1"=>2}, parsed_json) - assert_raise(GeneratorError) { generate(666, state) } - state.quirks_mode = true - assert state.quirks_mode? assert_equal '666', generate(666, state) end |