Hello community,
here is the log from the commit of package rubygem-json_pure for
openSUSE:Factory checked in at 2020-05-11 13:41:17
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/rubygem-json_pure (Old)
and /work/SRC/openSUSE:Factory/.rubygem-json_pure.new.2738 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "rubygem-json_pure"
Mon May 11 13:41:17 2020 rev:26 rq:802340 version:2.3.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/rubygem-json_pure/rubygem-json_pure.changes
2019-06-19 21:00:16.466081753 +0200
+++
/work/SRC/openSUSE:Factory/.rubygem-json_pure.new.2738/rubygem-json_pure.changes
2020-05-11 13:41:22.681122563 +0200
@@ -1,0 +2,6 @@
+Thu May 7 20:59:04 UTC 2020 - Stephan Kulow <[email protected]>
+
+- updated to version 2.3.0
+ see installed CHANGES.md
+
+-------------------------------------------------------------------
Old:
----
json_pure-2.2.0.gem
New:
----
json_pure-2.3.0.gem
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ rubygem-json_pure.spec ++++++
--- /var/tmp/diff_new_pack.wGc41H/_old 2020-05-11 13:41:23.689124702 +0200
+++ /var/tmp/diff_new_pack.wGc41H/_new 2020-05-11 13:41:23.689124702 +0200
@@ -1,7 +1,7 @@
#
# spec file for package rubygem-json_pure
#
-# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2020 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -24,7 +24,7 @@
#
Name: rubygem-json_pure
-Version: 2.2.0
+Version: 2.3.0
Release: 0
%define mod_name json_pure
%define mod_full_name %{mod_name}-%{version}
@@ -33,7 +33,7 @@
BuildRequires: %{rubygem gem2rpm}
BuildRequires: %{rubygem rdoc > 3.10}
BuildRequires: ruby-macros >= 5
-Url: http://flori.github.com/json
+URL: http://flori.github.com/json
Source: https://rubygems.org/gems/%{mod_full_name}.gem
Source1: gem2rpm.yml
Summary: JSON Implementation for Ruby
@@ -49,7 +49,7 @@
%install
%gem_install \
- --doc-files="CHANGES.md README.md" \
+ --doc-files="CHANGES.md LICENSE README.md" \
-f
%gem_packages
++++++ json_pure-2.2.0.gem -> json_pure-2.3.0.gem ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/.gitignore new/.gitignore
--- old/.gitignore 2019-02-21 23:15:38.000000000 +0100
+++ new/.gitignore 2020-03-25 02:58:01.000000000 +0100
@@ -15,3 +15,4 @@
*/**/Makefile
*/**/*.o
.byebug_history
+*.log
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/.travis.yml new/.travis.yml
--- old/.travis.yml 2019-02-21 23:15:38.000000000 +0100
+++ new/.travis.yml 2020-03-25 02:58:01.000000000 +0100
@@ -4,7 +4,6 @@
# Specify which ruby versions you wish to run your tests on, each version will
be used
rvm:
- - 1.9.3
- 2.0.0
- 2.1
- 2.2
@@ -12,12 +11,14 @@
- 2.4
- 2.5
- 2.6
+ - 2.7.0-preview3
- ruby-head
- jruby
+ - jruby-9.2.7.0
matrix:
allow_failures:
- - rvm: 1.9.3
- rvm: ruby-head
- rvm: jruby
+ - rvm: jruby-9.2.7.0
script: "bundle exec rake"
sudo: false
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/LICENSE new/LICENSE
--- old/LICENSE 1970-01-01 01:00:00.000000000 +0100
+++ new/LICENSE 2020-03-25 02:58:01.000000000 +0100
@@ -0,0 +1,56 @@
+Ruby is copyrighted free software by Yukihiro Matsumoto <[email protected]>.
+You can redistribute it and/or modify it under either the terms of the
+2-clause BSDL (see the file BSDL), or the conditions below:
+
+ 1. You may make and give away verbatim copies of the source form of the
+ software without restriction, provided that you duplicate all of the
+ original copyright notices and associated disclaimers.
+
+ 2. You may modify your copy of the software in any way, provided that
+ you do at least ONE of the following:
+
+ a) place your modifications in the Public Domain or otherwise
+ make them Freely Available, such as by posting said
+ modifications to Usenet or an equivalent medium, or by allowing
+ the author to include your modifications in the software.
+
+ b) use the modified software only within your corporation or
+ organization.
+
+ c) give non-standard binaries non-standard names, with
+ instructions on where to get the original software distribution.
+
+ d) make other distribution arrangements with the author.
+
+ 3. You may distribute the software in object code or binary form,
+ provided that you do at least ONE of the following:
+
+ a) distribute the binaries and library files of the software,
+ together with instructions (in the manual page or equivalent)
+ on where to get the original distribution.
+
+ b) accompany the distribution with the machine-readable source of
+ the software.
+
+ c) give non-standard binaries non-standard names, with
+ instructions on where to get the original software distribution.
+
+ d) make other distribution arrangements with the author.
+
+ 4. You may modify and include the part of the software into any other
+ software (possibly commercial). But some files in the distribution
+ are not written by the author, so that they are not under these terms.
+
+ For the list of those files and their copying conditions, see the
+ file LEGAL.
+
+ 5. The scripts and library files supplied as input to or produced as
+ output from the software do not automatically fall under the
+ copyright of the software, but belong to whomever generated them,
+ and may be sold commercially, and may be aggregated with this
+ software.
+
+ 6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
+ IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ PURPOSE.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/README.md new/README.md
--- old/README.md 2019-02-21 23:15:38.000000000 +0100
+++ new/README.md 2020-03-25 02:58:01.000000000 +0100
@@ -406,4 +406,4 @@
Online Documentation should be located at
-* http://json.rubyforge.org
+* https://www.rubydoc.info/gems/json
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Rakefile new/Rakefile
--- old/Rakefile 2019-02-21 23:15:38.000000000 +0100
+++ new/Rakefile 2020-03-25 02:58:01.000000000 +0100
@@ -23,8 +23,13 @@
def desc(*) end
end
-MAKE = ENV['MAKE'] || %w[gmake make].find { |c| system(c, '-v') }
-BUNDLE = ENV['BUNDLE'] || %w[bundle].find { |c| system(c, '-v') }
+which = lambda { |c|
+ w = `which #{c}`
+ break w.chomp unless w.empty?
+}
+
+MAKE = ENV['MAKE'] || %w[gmake make].find(&which)
+BUNDLE = ENV['BUNDLE'] || %w[bundle].find(&which)
PKG_NAME = 'json'
PKG_TITLE = 'JSON Implementation for Ruby'
PKG_VERSION = File.read('VERSION').chomp
@@ -47,8 +52,8 @@
JRUBY_PARSER_JAR = File.expand_path("lib/json/ext/parser.jar")
JRUBY_GENERATOR_JAR = File.expand_path("lib/json/ext/generator.jar")
-RAGEL_CODEGEN = %w[rlcodegen rlgen-cd ragel].find { |c| system(c, '-v') }
-RAGEL_DOTGEN = %w[rlgen-dot rlgen-cd ragel].find { |c| system(c, '-v') }
+RAGEL_CODEGEN = %w[rlcodegen rlgen-cd ragel].find(&which)
+RAGEL_DOTGEN = %w[rlgen-dot rlgen-cd ragel].find(&which)
desc "Installing library (pure)"
task :install_pure => :version do
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/VERSION new/VERSION
--- old/VERSION 2019-02-21 23:15:38.000000000 +0100
+++ new/VERSION 2020-03-25 02:58:01.000000000 +0100
@@ -1 +1 @@
-2.2.0
+2.3.0
Binary files old/checksums.yaml.gz and new/checksums.yaml.gz differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ext/json/ext/generator/generator.c
new/ext/json/ext/generator/generator.c
--- old/ext/json/ext/generator/generator.c 2019-02-21 23:15:38.000000000
+0100
+++ new/ext/json/ext/generator/generator.c 2020-03-25 02:58:01.000000000
+0100
@@ -15,7 +15,7 @@
#endif
mFloat, mString, mString_Extend,
mTrueClass, mFalseClass, mNilClass, eGeneratorError,
- eNestingError, CRegexp_MULTILINE, CJSON_SAFE_STATE_PROTOTYPE,
+ eNestingError,
i_SAFE_STATE_PROTOTYPE;
static ID i_to_s, i_to_json, i_new, i_indent, i_space, i_space_before,
@@ -237,6 +237,7 @@
int escape_len;
unsigned char c;
char buf[6] = { '\\', 'u' };
+ int ascii_only = rb_enc_str_asciionly_p(string);
for (start = 0, end = 0; end < len;) {
p = ptr + end;
@@ -281,14 +282,17 @@
break;
default:
{
- unsigned short clen = trailingBytesForUTF8[c] + 1;
- if (end + clen > len) {
- rb_raise(rb_path2class("JSON::GeneratorError"),
- "partial character in source, but hit
end");
- }
- if (!isLegalUTF8((UTF8 *) p, clen)) {
- rb_raise(rb_path2class("JSON::GeneratorError"),
- "source sequence is illegal/malformed
utf-8");
+ unsigned short clen = 1;
+ if (!ascii_only) {
+ clen += trailingBytesForUTF8[c];
+ if (end + clen > len) {
+ rb_raise(rb_path2class("JSON::GeneratorError"),
+ "partial character in source, but hit
end");
+ }
+ if (!isLegalUTF8((UTF8 *) p, clen)) {
+ rb_raise(rb_path2class("JSON::GeneratorError"),
+ "source sequence is illegal/malformed
utf-8");
+ }
}
end += clen;
}
@@ -692,7 +696,7 @@
if (RTEST(rb_funcall(self, i_respond_to_p, 1, name))) {
return rb_funcall(self, i_send, 1, name);
} else {
- return rb_ivar_get(self, rb_intern_str(rb_str_concat(rb_str_new2("@"),
name)));
+ return rb_attr_get(self, rb_intern_str(rb_str_concat(rb_str_new2("@"),
name)));
}
}
@@ -715,43 +719,83 @@
return Qnil;
}
-static void generate_json_object(FBuffer *buffer, VALUE Vstate,
JSON_Generator_State *state, VALUE obj)
+struct hash_foreach_arg {
+ FBuffer *buffer;
+ JSON_Generator_State *state;
+ VALUE Vstate;
+ int iter;
+};
+
+static int
+json_object_i(VALUE key, VALUE val, VALUE _arg)
{
+ struct hash_foreach_arg *arg = (struct hash_foreach_arg *)_arg;
+ FBuffer *buffer = arg->buffer;
+ JSON_Generator_State *state = arg->state;
+ VALUE Vstate = arg->Vstate;
+
char *object_nl = state->object_nl;
long object_nl_len = state->object_nl_len;
char *indent = state->indent;
long indent_len = state->indent_len;
- long max_nesting = state->max_nesting;
char *delim = FBUFFER_PTR(state->object_delim);
long delim_len = FBUFFER_LEN(state->object_delim);
char *delim2 = FBUFFER_PTR(state->object_delim2);
long delim2_len = FBUFFER_LEN(state->object_delim2);
+ long depth = state->depth;
+ int j;
+ VALUE klass, key_to_s;
+
+ if (arg->iter > 0) fbuffer_append(buffer, delim, delim_len);
+ if (object_nl) {
+ fbuffer_append(buffer, object_nl, object_nl_len);
+ }
+ if (indent) {
+ for (j = 0; j < depth; j++) {
+ fbuffer_append(buffer, indent, indent_len);
+ }
+ }
+
+ klass = CLASS_OF(key);
+ if (klass == rb_cString) {
+ key_to_s = key;
+ } else if (klass == rb_cSymbol) {
+ key_to_s = rb_id2str(SYM2ID(key));
+ } else {
+ key_to_s = rb_funcall(key, i_to_s, 0);
+ }
+ Check_Type(key_to_s, T_STRING);
+ generate_json(buffer, Vstate, state, key_to_s);
+ fbuffer_append(buffer, delim2, delim2_len);
+ generate_json(buffer, Vstate, state, val);
+
+ arg->iter++;
+ return ST_CONTINUE;
+}
+
+static void generate_json_object(FBuffer *buffer, VALUE Vstate,
JSON_Generator_State *state, VALUE obj)
+{
+ char *object_nl = state->object_nl;
+ long object_nl_len = state->object_nl_len;
+ char *indent = state->indent;
+ long indent_len = state->indent_len;
+ long max_nesting = state->max_nesting;
long depth = ++state->depth;
- int i, j;
- VALUE key, key_to_s, keys;
+ int j;
+ struct hash_foreach_arg arg;
+
if (max_nesting != 0 && depth > max_nesting) {
fbuffer_free(buffer);
rb_raise(eNestingError, "nesting of %ld is too deep", --state->depth);
}
fbuffer_append_char(buffer, '{');
- keys = rb_funcall(obj, i_keys, 0);
- for(i = 0; i < RARRAY_LEN(keys); i++) {
- if (i > 0) fbuffer_append(buffer, delim, delim_len);
- if (object_nl) {
- fbuffer_append(buffer, object_nl, object_nl_len);
- }
- if (indent) {
- for (j = 0; j < depth; j++) {
- fbuffer_append(buffer, indent, indent_len);
- }
- }
- key = rb_ary_entry(keys, i);
- key_to_s = rb_funcall(key, i_to_s, 0);
- Check_Type(key_to_s, T_STRING);
- generate_json(buffer, Vstate, state, key_to_s);
- fbuffer_append(buffer, delim2, delim2_len);
- generate_json(buffer, Vstate, state, rb_hash_aref(obj, key));
- }
+
+ arg.buffer = buffer;
+ arg.state = state;
+ arg.Vstate = Vstate;
+ arg.iter = 0;
+ rb_hash_foreach(obj, json_object_i, (VALUE)&arg);
+
depth = --state->depth;
if (object_nl) {
fbuffer_append(buffer, object_nl, object_nl_len);
@@ -802,11 +846,22 @@
fbuffer_append_char(buffer, ']');
}
+#ifdef HAVE_RUBY_ENCODING_H
+static int enc_utf8_compatible_p(rb_encoding *enc)
+{
+ if (enc == rb_usascii_encoding()) return 1;
+ if (enc == rb_utf8_encoding()) return 1;
+ return 0;
+}
+#endif
+
static void generate_json_string(FBuffer *buffer, VALUE Vstate,
JSON_Generator_State *state, VALUE obj)
{
fbuffer_append_char(buffer, '"');
#ifdef HAVE_RUBY_ENCODING_H
- obj = rb_funcall(obj, i_encode, 1, CEncoding_UTF_8);
+ if (!enc_utf8_compatible_p(rb_enc_get(obj))) {
+ obj = rb_str_encode(obj, CEncoding_UTF_8, 0, Qnil);
+ }
#endif
if (state->ascii_only) {
convert_UTF8_to_JSON_ASCII(buffer, obj);
@@ -970,6 +1025,8 @@
* * *allow_nan*: true if NaN, Infinity, and -Infinity should be
* generated, otherwise an exception is thrown, if these values are
* encountered. This options defaults to false.
+ * * *ascii_only*: true if only ASCII characters should be generated. This
+ * ontions defaults to false.
* * *buffer_initial_length*: sets the initial length of the generator's
* internal buffer.
*/
@@ -1025,10 +1082,8 @@
} else if (rb_obj_is_kind_of(opts, rb_cHash)) {
return rb_funcall(self, i_new, 1, opts);
} else {
- if (NIL_P(CJSON_SAFE_STATE_PROTOTYPE)) {
- CJSON_SAFE_STATE_PROTOTYPE = rb_const_get(mJSON,
i_SAFE_STATE_PROTOTYPE);
- }
- return rb_funcall(CJSON_SAFE_STATE_PROTOTYPE, i_dup, 0);
+ VALUE prototype = rb_const_get(mJSON, i_SAFE_STATE_PROTOTYPE);
+ return rb_funcall(prototype, i_dup, 0);
}
}
@@ -1267,7 +1322,7 @@
/*
* call-seq: ascii_only?
*
- * Returns true, if NaN, Infinity, and -Infinity should be generated, otherwise
+ * Returns true, if only ASCII characters should be generated. Otherwise
* returns false.
*/
static VALUE cState_ascii_only_p(VALUE self)
@@ -1344,6 +1399,8 @@
eGeneratorError = rb_path2class("JSON::GeneratorError");
eNestingError = rb_path2class("JSON::NestingError");
+ rb_gc_register_mark_object(eGeneratorError);
+ rb_gc_register_mark_object(eNestingError);
cState = rb_define_class_under(mGenerator, "State", rb_cObject);
rb_define_alloc_func(cState, cState_s_allocate);
@@ -1409,7 +1466,6 @@
mNilClass = rb_define_module_under(mGeneratorMethods, "NilClass");
rb_define_method(mNilClass, "to_json", mNilClass_to_json, -1);
- CRegexp_MULTILINE = rb_const_get(rb_cRegexp, rb_intern("MULTILINE"));
i_to_s = rb_intern("to_s");
i_to_json = rb_intern("to_json");
i_new = rb_intern("new");
@@ -1440,5 +1496,4 @@
i_encode = rb_intern("encode");
#endif
i_SAFE_STATE_PROTOTYPE = rb_intern("SAFE_STATE_PROTOTYPE");
- CJSON_SAFE_STATE_PROTOTYPE = Qnil;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ext/json/ext/parser/parser.c
new/ext/json/ext/parser/parser.c
--- old/ext/json/ext/parser/parser.c 2019-02-21 23:15:38.000000000 +0100
+++ new/ext/json/ext/parser/parser.c 2020-03-25 02:58:01.000000000 +0100
@@ -27,7 +27,7 @@
/* unicode */
-static const char digit_values[256] = {
+static const signed char digit_values[256] = {
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1,
@@ -46,7 +46,7 @@
static UTF32 unescape_unicode(const unsigned char *p)
{
- char b;
+ signed char b;
UTF32 result = 0;
b = digit_values[p[0]];
if (b < 0) return UNI_REPLACEMENT_CHAR;
@@ -1676,10 +1676,8 @@
if (json->symbolize_names && json->parsing_name) {
*result = rb_str_intern(*result);
- } else {
- if (RB_TYPE_P(*result, T_STRING)) {
- rb_str_resize(*result, RSTRING_LEN(*result));
- }
+ } else if (RB_TYPE_P(*result, T_STRING)) {
+ rb_str_resize(*result, RSTRING_LEN(*result));
}
if (cs >= JSON_string_first_final) {
return p + 1;
@@ -1835,7 +1833,7 @@
} else {
json->max_nesting = 100;
json->allow_nan = 0;
- json->create_additions = 1;
+ json->create_additions = 0;
json->create_id = rb_funcall(mJSON, i_create_id, 0);
json->object_class = Qnil;
json->array_class = Qnil;
@@ -1850,7 +1848,7 @@
}
-#line 1854 "parser.c"
+#line 1852 "parser.c"
enum {JSON_start = 1};
enum {JSON_first_final = 10};
enum {JSON_error = 0};
@@ -1858,7 +1856,7 @@
enum {JSON_en_main = 1};
-#line 762 "parser.rl"
+#line 760 "parser.rl"
/*
@@ -1875,16 +1873,16 @@
GET_PARSER;
-#line 1879 "parser.c"
+#line 1877 "parser.c"
{
cs = JSON_start;
}
-#line 778 "parser.rl"
+#line 776 "parser.rl"
p = json->source;
pe = p + json->len;
-#line 1888 "parser.c"
+#line 1886 "parser.c"
{
if ( p == pe )
goto _test_eof;
@@ -1918,7 +1916,7 @@
cs = 0;
goto _out;
tr2:
-#line 754 "parser.rl"
+#line 752 "parser.rl"
{
char *np = JSON_parse_value(json, p, pe, &result, 0);
if (np == NULL) { p--; {p++; cs = 10; goto _out;} } else {p = ((
np))-1;}
@@ -1928,7 +1926,7 @@
if ( ++p == pe )
goto _test_eof10;
case 10:
-#line 1932 "parser.c"
+#line 1930 "parser.c"
switch( (*p) ) {
case 13: goto st10;
case 32: goto st10;
@@ -2017,7 +2015,7 @@
_out: {}
}
-#line 781 "parser.rl"
+#line 779 "parser.rl"
if (cs >= JSON_first_final && p == pe) {
return result;
@@ -2091,14 +2089,21 @@
cParser = rb_define_class_under(mExt, "Parser", rb_cObject);
eParserError = rb_path2class("JSON::ParserError");
eNestingError = rb_path2class("JSON::NestingError");
+ rb_gc_register_mark_object(eParserError);
+ rb_gc_register_mark_object(eNestingError);
rb_define_alloc_func(cParser, cJSON_parser_s_allocate);
rb_define_method(cParser, "initialize", cParser_initialize, -1);
rb_define_method(cParser, "parse", cParser_parse, 0);
rb_define_method(cParser, "source", cParser_source, 0);
CNaN = rb_const_get(mJSON, rb_intern("NaN"));
+ rb_gc_register_mark_object(CNaN);
+
CInfinity = rb_const_get(mJSON, rb_intern("Infinity"));
+ rb_gc_register_mark_object(CInfinity);
+
CMinusInfinity = rb_const_get(mJSON, rb_intern("MinusInfinity"));
+ rb_gc_register_mark_object(CMinusInfinity);
i_json_creatable_p = rb_intern("json_creatable?");
i_json_create = rb_intern("json_create");
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ext/json/ext/parser/parser.rl
new/ext/json/ext/parser/parser.rl
--- old/ext/json/ext/parser/parser.rl 2019-02-21 23:15:38.000000000 +0100
+++ new/ext/json/ext/parser/parser.rl 2020-03-25 02:58:01.000000000 +0100
@@ -25,7 +25,7 @@
/* unicode */
-static const char digit_values[256] = {
+static const signed char digit_values[256] = {
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1,
@@ -44,7 +44,7 @@
static UTF32 unescape_unicode(const unsigned char *p)
{
- char b;
+ signed char b;
UTF32 result = 0;
b = digit_values[p[0]];
if (b < 0) return UNI_REPLACEMENT_CHAR;
@@ -571,10 +571,8 @@
if (json->symbolize_names && json->parsing_name) {
*result = rb_str_intern(*result);
- } else {
- if (RB_TYPE_P(*result, T_STRING)) {
- rb_str_resize(*result, RSTRING_LEN(*result));
- }
+ } else if (RB_TYPE_P(*result, T_STRING)) {
+ rb_str_resize(*result, RSTRING_LEN(*result));
}
if (cs >= JSON_string_first_final) {
return p + 1;
@@ -730,7 +728,7 @@
} else {
json->max_nesting = 100;
json->allow_nan = 0;
- json->create_additions = 1;
+ json->create_additions = 0;
json->create_id = rb_funcall(mJSON, i_create_id, 0);
json->object_class = Qnil;
json->array_class = Qnil;
@@ -851,14 +849,21 @@
cParser = rb_define_class_under(mExt, "Parser", rb_cObject);
eParserError = rb_path2class("JSON::ParserError");
eNestingError = rb_path2class("JSON::NestingError");
+ rb_gc_register_mark_object(eParserError);
+ rb_gc_register_mark_object(eNestingError);
rb_define_alloc_func(cParser, cJSON_parser_s_allocate);
rb_define_method(cParser, "initialize", cParser_initialize, -1);
rb_define_method(cParser, "parse", cParser_parse, 0);
rb_define_method(cParser, "source", cParser_source, 0);
CNaN = rb_const_get(mJSON, rb_intern("NaN"));
+ rb_gc_register_mark_object(CNaN);
+
CInfinity = rb_const_get(mJSON, rb_intern("Infinity"));
+ rb_gc_register_mark_object(CInfinity);
+
CMinusInfinity = rb_const_get(mJSON, rb_intern("MinusInfinity"));
+ rb_gc_register_mark_object(CMinusInfinity);
i_json_creatable_p = rb_intern("json_creatable?");
i_json_create = rb_intern("json_create");
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/java/src/json/ext/Generator.java
new/java/src/json/ext/Generator.java
--- old/java/src/json/ext/Generator.java 2019-02-21 23:15:38.000000000
+0100
+++ new/java/src/json/ext/Generator.java 2020-03-25 02:58:01.000000000
+0100
@@ -7,6 +7,7 @@
import org.jruby.Ruby;
import org.jruby.RubyArray;
+import org.jruby.RubyBasicObject;
import org.jruby.RubyBignum;
import org.jruby.RubyBoolean;
import org.jruby.RubyClass;
@@ -15,6 +16,7 @@
import org.jruby.RubyHash;
import org.jruby.RubyNumeric;
import org.jruby.RubyString;
+import org.jruby.runtime.ClassIndex;
import org.jruby.runtime.ThreadContext;
import org.jruby.runtime.builtin.IRubyObject;
import org.jruby.util.ByteList;
@@ -57,6 +59,19 @@
return handler.generateNew(session, object);
}
+ // NOTE: drop this once Ruby 1.9.3 support is gone!
+ private static final int FIXNUM = 1;
+ private static final int BIGNUM = 2;
+ private static final int ARRAY = 3;
+ private static final int STRING = 4;
+ private static final int NIL = 5;
+ private static final int TRUE = 6;
+ private static final int FALSE = 7;
+ private static final int HASH = 10;
+ private static final int FLOAT = 11;
+ // hard-coded due JRuby 1.7 compatibility
+ //
https://github.com/jruby/jruby/blob/1.7.27/core/src/main/java/org/jruby/runtime/ClassIndex.java
+
/**
* Returns the best serialization handler for the given object.
*/
@@ -65,16 +80,24 @@
@SuppressWarnings("unchecked")
private static <T extends IRubyObject>
Handler<? super T> getHandlerFor(Ruby runtime, T object) {
- RubyClass metaClass = object.getMetaClass();
- if (metaClass == runtime.getString()) return (Handler)STRING_HANDLER;
- if (metaClass == runtime.getFixnum()) return (Handler)FIXNUM_HANDLER;
- if (metaClass == runtime.getHash()) return (Handler)HASH_HANDLER;
- if (metaClass == runtime.getArray()) return (Handler)ARRAY_HANDLER;
- if (object.isNil()) return (Handler)NIL_HANDLER;
- if (object == runtime.getTrue()) return (Handler)TRUE_HANDLER;
- if (object == runtime.getFalse()) return (Handler)FALSE_HANDLER;
- if (metaClass == runtime.getFloat()) return (Handler)FLOAT_HANDLER;
- if (metaClass == runtime.getBignum()) return (Handler)BIGNUM_HANDLER;
+ switch (((RubyBasicObject) object).getNativeTypeIndex()) {
+ // can not use getNativeClassIndex due 1.7 compatibility
+ case NIL : return (Handler) NIL_HANDLER;
+ case TRUE : return (Handler) TRUE_HANDLER;
+ case FALSE : return (Handler) FALSE_HANDLER;
+ case FLOAT : return (Handler) FLOAT_HANDLER;
+ case FIXNUM : return (Handler) FIXNUM_HANDLER;
+ case BIGNUM : return (Handler) BIGNUM_HANDLER;
+ case STRING :
+ if (((RubyBasicObject) object).getMetaClass() !=
runtime.getString()) break;
+ return (Handler) STRING_HANDLER;
+ case ARRAY :
+ if (((RubyBasicObject) object).getMetaClass() !=
runtime.getArray()) break;
+ return (Handler) ARRAY_HANDLER;
+ case HASH :
+ if (((RubyBasicObject) object).getMetaClass() !=
runtime.getHash()) break;
+ return (Handler) HASH_HANDLER;
+ }
return GENERIC_HANDLER;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/json-java.gemspec new/json-java.gemspec
--- old/json-java.gemspec 2019-02-21 23:15:38.000000000 +0100
+++ new/json-java.gemspec 2020-03-25 02:58:01.000000000 +0100
@@ -8,9 +8,8 @@
s.description = "A JSON implementation as a JRuby extension."
s.author = "Daniel Luz"
s.email = "[email protected]"
- s.homepage = "http://json-jruby.rubyforge.org/"
+ s.homepage = "http://flori.github.com/json"
s.platform = 'java'
- s.rubyforge_project = "json-jruby"
s.licenses = ["Ruby"]
s.files = Dir["{docs,lib,tests}/**/*"]
Binary files old/json.gemspec and new/json.gemspec differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/json_pure.gemspec new/json_pure.gemspec
--- old/json_pure.gemspec 2019-02-21 23:15:38.000000000 +0100
+++ new/json_pure.gemspec 2020-03-25 02:58:01.000000000 +0100
@@ -1,23 +1,23 @@
# -*- encoding: utf-8 -*-
-# stub: json_pure 2.2.0 ruby lib
+# stub: json_pure 2.3.0 ruby lib
Gem::Specification.new do |s|
s.name = "json_pure".freeze
- s.version = "2.2.0"
+ s.version = "2.3.0"
s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if
s.respond_to? :required_rubygems_version=
s.require_paths = ["lib".freeze]
s.authors = ["Florian Frank".freeze]
- s.date = "2019-02-21"
+ s.date = "2019-12-11"
s.description = "This is a JSON implementation in pure Ruby.".freeze
s.email = "[email protected]".freeze
s.extra_rdoc_files = ["README.md".freeze]
- s.files = ["./tests/test_helper.rb".freeze, ".gitignore".freeze,
".travis.yml".freeze, "CHANGES.md".freeze, "Gemfile".freeze,
"README-json-jruby.md".freeze, "README.md".freeze, "Rakefile".freeze,
"VERSION".freeze, "data/example.json".freeze, "data/index.html".freeze,
"data/prototype.js".freeze, "diagrams/.keep".freeze,
"ext/json/ext/fbuffer/fbuffer.h".freeze,
"ext/json/ext/generator/depend".freeze,
"ext/json/ext/generator/extconf.rb".freeze,
"ext/json/ext/generator/generator.c".freeze,
"ext/json/ext/generator/generator.h".freeze,
"ext/json/ext/parser/depend".freeze, "ext/json/ext/parser/extconf.rb".freeze,
"ext/json/ext/parser/parser.c".freeze, "ext/json/ext/parser/parser.h".freeze,
"ext/json/ext/parser/parser.rl".freeze, "ext/json/extconf.rb".freeze,
"install.rb".freeze, "java/src/json/ext/ByteListTranscoder.java".freeze,
"java/src/json/ext/Generator.java".freeze,
"java/src/json/ext/GeneratorMethods.java".freeze,
"java/src/json/ext/GeneratorService.java".freeze,
"java/src/json/ext/GeneratorState.java".freeze,
"java/src/json/ext/OptionsReader.java".freeze,
"java/src/json/ext/Parser.java".freeze, "java/src/json/ext/Parser.rl".freeze,
"java/src/json/ext/ParserService.java".freeze,
"java/src/json/ext/RuntimeInfo.java".freeze,
"java/src/json/ext/StringDecoder.java".freeze,
"java/src/json/ext/StringEncoder.java".freeze,
"java/src/json/ext/Utils.java".freeze, "json-java.gemspec".freeze,
"json.gemspec".freeze, "json_pure.gemspec".freeze, "lib/json.rb".freeze,
"lib/json/add/bigdecimal.rb".freeze, "lib/json/add/complex.rb".freeze,
"lib/json/add/core.rb".freeze, "lib/json/add/date.rb".freeze,
"lib/json/add/date_time.rb".freeze, "lib/json/add/exception.rb".freeze,
"lib/json/add/ostruct.rb".freeze, "lib/json/add/range.rb".freeze,
"lib/json/add/rational.rb".freeze, "lib/json/add/regexp.rb".freeze,
"lib/json/add/set.rb".freeze, "lib/json/add/struct.rb".freeze,
"lib/json/add/symbol.rb".freeze, "lib/json/add/time.rb".freeze,
"lib/json/common.rb".freeze, "lib/json/ext.rb".freeze,
"lib/json/ext/.keep".freeze, "lib/json/generic_object.rb".freeze,
"lib/json/pure.rb".freeze, "lib/json/pure/generator.rb".freeze,
"lib/json/pure/parser.rb".freeze, "lib/json/version.rb".freeze,
"references/rfc7159.txt".freeze, "tests/fixtures/fail10.json".freeze,
"tests/fixtures/fail11.json".freeze, "tests/fixtures/fail12.json".freeze,
"tests/fixtures/fail13.json".freeze, "tests/fixtures/fail14.json".freeze,
"tests/fixtures/fail18.json".freeze, "tests/fixtures/fail19.json".freeze,
"tests/fixtures/fail2.json".freeze, "tests/fixtures/fail20.json".freeze,
"tests/fixtures/fail21.json".freeze, "tests/fixtures/fail22.json".freeze,
"tests/fixtures/fail23.json".freeze, "tests/fixtures/fail24.json".freeze,
"tests/fixtures/fail25.json".freeze, "tests/fixtures/fail27.json".freeze,
"tests/fixtures/fail28.json".freeze, "tests/fixtures/fail3.json".freeze,
"tests/fixtures/fail4.json".freeze, "tests/fixtures/fail5.json".freeze,
"tests/fixtures/fail6.json".freeze, "tests/fixtures/fail7.json".freeze,
"tests/fixtures/fail8.json".freeze, "tests/fixtures/fail9.json".freeze,
"tests/fixtures/obsolete_fail1.json".freeze,
"tests/fixtures/pass1.json".freeze, "tests/fixtures/pass15.json".freeze,
"tests/fixtures/pass16.json".freeze, "tests/fixtures/pass17.json".freeze,
"tests/fixtures/pass2.json".freeze, "tests/fixtures/pass26.json".freeze,
"tests/fixtures/pass3.json".freeze, "tests/json_addition_test.rb".freeze,
"tests/json_common_interface_test.rb".freeze,
"tests/json_encoding_test.rb".freeze, "tests/json_ext_parser_test.rb".freeze,
"tests/json_fixtures_test.rb".freeze, "tests/json_generator_test.rb".freeze,
"tests/json_generic_object_test.rb".freeze, "tests/json_parser_test.rb".freeze,
"tests/json_string_matching_test.rb".freeze, "tests/test_helper.rb".freeze,
"tools/diff.sh".freeze, "tools/fuzz.rb".freeze, "tools/server.rb".freeze]
+ s.files = ["./tests/test_helper.rb".freeze, ".gitignore".freeze,
".travis.yml".freeze, "CHANGES.md".freeze, "Gemfile".freeze, "LICENSE".freeze,
"README-json-jruby.md".freeze, "README.md".freeze, "Rakefile".freeze,
"VERSION".freeze, "diagrams/.keep".freeze,
"ext/json/ext/fbuffer/fbuffer.h".freeze,
"ext/json/ext/generator/depend".freeze,
"ext/json/ext/generator/extconf.rb".freeze,
"ext/json/ext/generator/generator.c".freeze,
"ext/json/ext/generator/generator.h".freeze,
"ext/json/ext/parser/depend".freeze, "ext/json/ext/parser/extconf.rb".freeze,
"ext/json/ext/parser/parser.c".freeze, "ext/json/ext/parser/parser.h".freeze,
"ext/json/ext/parser/parser.rl".freeze, "ext/json/extconf.rb".freeze,
"install.rb".freeze, "java/src/json/ext/ByteListTranscoder.java".freeze,
"java/src/json/ext/Generator.java".freeze,
"java/src/json/ext/GeneratorMethods.java".freeze,
"java/src/json/ext/GeneratorService.java".freeze,
"java/src/json/ext/GeneratorState.java".freeze,
"java/src/json/ext/OptionsReader.java".freeze,
"java/src/json/ext/Parser.java".freeze, "java/src/json/ext/Parser.rl".freeze,
"java/src/json/ext/ParserService.java".freeze,
"java/src/json/ext/RuntimeInfo.java".freeze,
"java/src/json/ext/StringDecoder.java".freeze,
"java/src/json/ext/StringEncoder.java".freeze,
"java/src/json/ext/Utils.java".freeze, "json-java.gemspec".freeze,
"json.gemspec".freeze, "json_pure.gemspec".freeze, "lib/json.rb".freeze,
"lib/json/add/bigdecimal.rb".freeze, "lib/json/add/complex.rb".freeze,
"lib/json/add/core.rb".freeze, "lib/json/add/date.rb".freeze,
"lib/json/add/date_time.rb".freeze, "lib/json/add/exception.rb".freeze,
"lib/json/add/ostruct.rb".freeze, "lib/json/add/range.rb".freeze,
"lib/json/add/rational.rb".freeze, "lib/json/add/regexp.rb".freeze,
"lib/json/add/set.rb".freeze, "lib/json/add/struct.rb".freeze,
"lib/json/add/symbol.rb".freeze, "lib/json/add/time.rb".freeze,
"lib/json/common.rb".freeze, "lib/json/ext.rb".freeze,
"lib/json/ext/.keep".freeze, "lib/json/generic_object.rb".freeze,
"lib/json/pure.rb".freeze, "lib/json/pure/generator.rb".freeze,
"lib/json/pure/parser.rb".freeze, "lib/json/version.rb".freeze,
"references/rfc7159.txt".freeze, "tests/fixtures/fail10.json".freeze,
"tests/fixtures/fail11.json".freeze, "tests/fixtures/fail12.json".freeze,
"tests/fixtures/fail13.json".freeze, "tests/fixtures/fail14.json".freeze,
"tests/fixtures/fail18.json".freeze, "tests/fixtures/fail19.json".freeze,
"tests/fixtures/fail2.json".freeze, "tests/fixtures/fail20.json".freeze,
"tests/fixtures/fail21.json".freeze, "tests/fixtures/fail22.json".freeze,
"tests/fixtures/fail23.json".freeze, "tests/fixtures/fail24.json".freeze,
"tests/fixtures/fail25.json".freeze, "tests/fixtures/fail27.json".freeze,
"tests/fixtures/fail28.json".freeze, "tests/fixtures/fail3.json".freeze,
"tests/fixtures/fail4.json".freeze, "tests/fixtures/fail5.json".freeze,
"tests/fixtures/fail6.json".freeze, "tests/fixtures/fail7.json".freeze,
"tests/fixtures/fail8.json".freeze, "tests/fixtures/fail9.json".freeze,
"tests/fixtures/obsolete_fail1.json".freeze,
"tests/fixtures/pass1.json".freeze, "tests/fixtures/pass15.json".freeze,
"tests/fixtures/pass16.json".freeze, "tests/fixtures/pass17.json".freeze,
"tests/fixtures/pass2.json".freeze, "tests/fixtures/pass26.json".freeze,
"tests/fixtures/pass3.json".freeze, "tests/json_addition_test.rb".freeze,
"tests/json_common_interface_test.rb".freeze,
"tests/json_encoding_test.rb".freeze, "tests/json_ext_parser_test.rb".freeze,
"tests/json_fixtures_test.rb".freeze, "tests/json_generator_test.rb".freeze,
"tests/json_generic_object_test.rb".freeze, "tests/json_parser_test.rb".freeze,
"tests/json_string_matching_test.rb".freeze, "tests/test_helper.rb".freeze,
"tools/diff.sh".freeze, "tools/fuzz.rb".freeze, "tools/server.rb".freeze]
s.homepage = "http://flori.github.com/json".freeze
s.licenses = ["Ruby".freeze]
s.rdoc_options = ["--title".freeze, "JSON implemention for ruby".freeze,
"--main".freeze, "README.md".freeze]
s.required_ruby_version = Gem::Requirement.new(">= 1.9".freeze)
- s.rubygems_version = "2.7.6".freeze
+ s.rubygems_version = "3.0.3".freeze
s.summary = "JSON Implementation for Ruby".freeze
s.test_files = ["./tests/test_helper.rb".freeze]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/json/add/bigdecimal.rb
new/lib/json/add/bigdecimal.rb
--- old/lib/json/add/bigdecimal.rb 2019-02-21 23:15:38.000000000 +0100
+++ new/lib/json/add/bigdecimal.rb 2020-03-25 02:58:01.000000000 +0100
@@ -23,7 +23,7 @@
end
# return the JSON value
- def to_json(*)
- as_json.to_json
+ def to_json(*args)
+ as_json.to_json(*args)
end
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/json/add/complex.rb new/lib/json/add/complex.rb
--- old/lib/json/add/complex.rb 2019-02-21 23:15:38.000000000 +0100
+++ new/lib/json/add/complex.rb 2020-03-25 02:58:01.000000000 +0100
@@ -23,7 +23,7 @@
end
# Stores class name (Complex) along with real value <tt>r</tt> and imaginary
value <tt>i</tt> as JSON string
- def to_json(*)
- as_json.to_json
+ def to_json(*args)
+ as_json.to_json(*args)
end
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/json/add/rational.rb new/lib/json/add/rational.rb
--- old/lib/json/add/rational.rb 2019-02-21 23:15:38.000000000 +0100
+++ new/lib/json/add/rational.rb 2020-03-25 02:58:01.000000000 +0100
@@ -22,7 +22,7 @@
end
# Stores class name (Rational) along with numerator value <tt>n</tt> and
denominator value <tt>d</tt> as JSON string
- def to_json(*)
- as_json.to_json
+ def to_json(*args)
+ as_json.to_json(*args)
end
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/json/add/regexp.rb new/lib/json/add/regexp.rb
--- old/lib/json/add/regexp.rb 2019-02-21 23:15:38.000000000 +0100
+++ new/lib/json/add/regexp.rb 2020-03-25 02:58:01.000000000 +0100
@@ -24,7 +24,7 @@
# Stores class name (Regexp) with options <tt>o</tt> and source <tt>s</tt>
# (Regexp or String) as JSON string
- def to_json(*)
- as_json.to_json
+ def to_json(*args)
+ as_json.to_json(*args)
end
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/json/common.rb new/lib/json/common.rb
--- old/lib/json/common.rb 2019-02-21 23:15:38.000000000 +0100
+++ new/lib/json/common.rb 2020-03-25 02:58:01.000000000 +0100
@@ -153,7 +153,7 @@
# * *object_class*: Defaults to Hash
# * *array_class*: Defaults to Array
def parse(source, opts = {})
- Parser.new(source, opts).parse
+ Parser.new(source, **(opts||{})).parse
end
# Parse the JSON document _source_ into a Ruby data structure and return it.
@@ -176,7 +176,7 @@
:max_nesting => false,
:allow_nan => true
}.merge(opts)
- Parser.new(source, opts).parse
+ Parser.new(source, **(opts||{})).parse
end
# Generate a JSON document from the Ruby data structure _obj_ and return
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/json/pure/generator.rb
new/lib/json/pure/generator.rb
--- old/lib/json/pure/generator.rb 2019-02-21 23:15:38.000000000 +0100
+++ new/lib/json/pure/generator.rb 2020-03-25 02:58:01.000000000 +0100
@@ -250,7 +250,8 @@
if respond_to?(name)
__send__(name)
else
- instance_variable_get("@#{name}")
+ instance_variable_get("@#{name}") if
+ instance_variables.include?("@#{name}".to_sym) # avoid warning
end
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/json/pure/parser.rb new/lib/json/pure/parser.rb
--- old/lib/json/pure/parser.rb 2019-02-21 23:15:38.000000000 +0100
+++ new/lib/json/pure/parser.rb 2020-03-25 02:58:01.000000000 +0100
@@ -197,7 +197,15 @@
def parse_value
case
when scan(FLOAT)
- @decimal_class && @decimal_class.new(self[1]) || Float(self[1])
+ if @decimal_class then
+ if @decimal_class == BigDecimal then
+ BigDecimal(self[1])
+ else
+ @decimal_class.new(self[1]) || Float(self[1])
+ end
+ else
+ Float(self[1])
+ end
when scan(INTEGER)
Integer(self[1])
when scan(TRUE)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/json/version.rb new/lib/json/version.rb
--- old/lib/json/version.rb 2019-02-21 23:15:38.000000000 +0100
+++ new/lib/json/version.rb 2020-03-25 02:58:01.000000000 +0100
@@ -1,7 +1,7 @@
# frozen_string_literal: false
module JSON
# JSON version
- VERSION = '2.2.0'
+ VERSION = '2.3.0'
VERSION_ARRAY = VERSION.split(/\./).map { |x| x.to_i } # :nodoc:
VERSION_MAJOR = VERSION_ARRAY[0] # :nodoc:
VERSION_MINOR = VERSION_ARRAY[1] # :nodoc:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/metadata new/metadata
--- old/metadata 2019-02-21 23:15:38.000000000 +0100
+++ new/metadata 2020-03-25 02:58:01.000000000 +0100
@@ -1,14 +1,14 @@
--- !ruby/object:Gem::Specification
name: json_pure
version: !ruby/object:Gem::Version
- version: 2.2.0
+ version: 2.3.0
platform: ruby
authors:
- Florian Frank
autorequire:
bindir: bin
cert_chain: []
-date: 2019-02-21 00:00:00.000000000 Z
+date: 2019-12-11 00:00:00.000000000 Z
dependencies:
- !ruby/object:Gem::Dependency
name: rake
@@ -50,6 +50,7 @@
- ".travis.yml"
- CHANGES.md
- Gemfile
+- LICENSE
- README-json-jruby.md
- README.md
- Rakefile
@@ -174,7 +175,7 @@
- !ruby/object:Gem::Version
version: '0'
requirements: []
-rubygems_version: 3.0.2
+rubygems_version: 3.1.2
signing_key:
specification_version: 4
summary: JSON Implementation for Ruby
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/tests/json_common_interface_test.rb
new/tests/json_common_interface_test.rb
--- old/tests/json_common_interface_test.rb 2019-02-21 23:15:38.000000000
+0100
+++ new/tests/json_common_interface_test.rb 2020-03-25 02:58:01.000000000
+0100
@@ -27,15 +27,15 @@
end
def test_parser
- assert_match /::Parser\z/, JSON.parser.name
+ assert_match(/::Parser\z/, JSON.parser.name)
end
def test_generator
- assert_match /::Generator\z/, JSON.generator.name
+ assert_match(/::Generator\z/, JSON.generator.name)
end
def test_state
- assert_match /::Generator::State\z/, JSON.state.name
+ assert_match(/::Generator::State\z/, JSON.state.name)
end
def test_create_id
@@ -56,7 +56,7 @@
end
def test_parse_bang
- assert_equal [ 1, NaN, 3, ], JSON.parse!('[ 1, NaN, 3 ]')
+ assert_equal [ 1, Infinity, 3, ], JSON.parse!('[ 1, Infinity, 3 ]')
end
def test_generate
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/tests/json_generator_test.rb
new/tests/json_generator_test.rb
--- old/tests/json_generator_test.rb 2019-02-21 23:15:38.000000000 +0100
+++ new/tests/json_generator_test.rb 2020-03-25 02:58:01.000000000 +0100
@@ -40,6 +40,44 @@
EOT
end
+ def silence
+ v = $VERBOSE
+ $VERBOSE = nil
+ yield
+ ensure
+ $VERBOSE = v
+ end
+
+ def test_remove_const_segv
+ return if RUBY_ENGINE == 'jruby'
+ stress = GC.stress
+ const = JSON::SAFE_STATE_PROTOTYPE.dup
+
+ bignum_too_long_to_embed_as_string = 1234567890123456789012345
+ expect = bignum_too_long_to_embed_as_string.to_s
+ GC.stress = true
+
+ 10.times do |i|
+ tmp = bignum_too_long_to_embed_as_string.to_json
+ raise "'\#{expect}' is expected, but '\#{tmp}'" unless tmp == expect
+ end
+
+ silence do
+ JSON.const_set :SAFE_STATE_PROTOTYPE, nil
+ end
+
+ 10.times do |i|
+ assert_raise TypeError do
+ bignum_too_long_to_embed_as_string.to_json
+ end
+ end
+ ensure
+ GC.stress = stress
+ silence do
+ JSON.const_set :SAFE_STATE_PROTOTYPE, const
+ end
+ end if JSON.const_defined?("Ext")
+
def test_generate
json = generate(@hash)
assert_equal(parse(@json2), parse(json))
@@ -374,4 +412,10 @@
assert_equal '["foo"]', JSON.generate([s.new('foo')])
end
end
+
+ if defined?(Encoding)
+ def test_nonutf8_encoding
+ assert_equal("\"5\u{b0}\"", "5\xb0".force_encoding("iso-8859-1").to_json)
+ end
+ end
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/tests/json_parser_test.rb
new/tests/json_parser_test.rb
--- old/tests/json_parser_test.rb 2019-02-21 23:15:38.000000000 +0100
+++ new/tests/json_parser_test.rb 2020-03-25 02:58:01.000000000 +0100
@@ -91,27 +91,27 @@
assert_raise(JSON::ParserError) { parse('+23') }
assert_raise(JSON::ParserError) { parse('.23') }
assert_raise(JSON::ParserError) { parse('023') }
- assert_equal 23, parse('23')
- assert_equal -23, parse('-23')
- assert_equal_float 3.141, parse('3.141')
- assert_equal_float -3.141, parse('-3.141')
- assert_equal_float 3.141, parse('3141e-3')
- assert_equal_float 3.141, parse('3141.1e-3')
- assert_equal_float 3.141, parse('3141E-3')
- assert_equal_float 3.141, parse('3141.0E-3')
- assert_equal_float -3.141, parse('-3141.0e-3')
- assert_equal_float -3.141, parse('-3141e-3')
+ assert_equal(23, parse('23'))
+ assert_equal(-23, parse('-23'))
+ assert_equal_float(3.141, parse('3.141'))
+ assert_equal_float(-3.141, parse('-3.141'))
+ assert_equal_float(3.141, parse('3141e-3'))
+ assert_equal_float(3.141, parse('3141.1e-3'))
+ assert_equal_float(3.141, parse('3141E-3'))
+ assert_equal_float(3.141, parse('3141.0E-3'))
+ assert_equal_float(-3.141, parse('-3141.0e-3'))
+ assert_equal_float(-3.141, parse('-3141e-3'))
assert_raise(ParserError) { parse('NaN') }
assert parse('NaN', :allow_nan => true).nan?
assert_raise(ParserError) { parse('Infinity') }
- assert_equal 1.0/0, parse('Infinity', :allow_nan => true)
+ assert_equal(1.0/0, parse('Infinity', :allow_nan => true))
assert_raise(ParserError) { parse('-Infinity') }
- assert_equal -1.0/0, parse('-Infinity', :allow_nan => true)
+ assert_equal(-1.0/0, parse('-Infinity', :allow_nan => true))
end
def test_parse_bigdecimals
- assert_equal(BigDecimal,
JSON.parse('{"foo": 9.01234567890123456789}', decimal_class:
BigDecimal)["foo"].class)
-
assert_equal(BigDecimal.new("0.901234567890123456789E1"),JSON.parse('{"foo":
9.01234567890123456789}', decimal_class: BigDecimal)["foo"] )
+ assert_equal(BigDecimal, JSON.parse('{"foo":
9.01234567890123456789}', decimal_class: BigDecimal)["foo"].class)
+ assert_equal(BigDecimal("0.901234567890123456789E1"),JSON.parse('{"foo":
9.01234567890123456789}', decimal_class: BigDecimal)["foo"] )
end
if Array.method_defined?(:permutation)