oj 3.7.8 → 3.7.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5008cd86952b184d31350d5e84256ca433e3dafe672c04400cd8d74bbc6190f4
4
- data.tar.gz: 620b94ba6107477d17eda4d2f3558f1aa98d3c6635bdbb16443ba2b5868aeb57
3
+ metadata.gz: 73661a33c10dd2efe5e942e8eb7b584a065803d5ab0516c7362210e0b7f6ce29
4
+ data.tar.gz: 6091f05664c4f290858f86efb405b1e17732b1eecb7ccb1829c1d2944a6a5a8c
5
5
  SHA512:
6
- metadata.gz: c1641f5af216aab8948c70c5c0e75f6f9fc6db9de5eca5cafad65b7fc6b877cded31bbf9f5b0fdb438217bfeae7c04cb880ec1b560771e0b341a0f1292f3c1e3
7
- data.tar.gz: 1e3a1f8ee9b47fb8004cc53992ae68e5cceb055a53daecc73771ebccf3d3edcefeaac70e58f740279482e49eca89f32d38866a3412d67efdb9738f4e80c8c2e2
6
+ metadata.gz: 3a54eb58d01658e36c63f29128c47e026ce05687261465793f4328146807d5b32a4af6c8286f3f4dbe176e1bd1613214ea6e260051ee0477abd1e7ab27173fa7
7
+ data.tar.gz: b90c7c8e526636640b5b346fad295fe4b0a7c97671e7acafd5e55ee71b9e6f0727c0dae9eeec58dc1b8729040f91ea14717e6cadb13bce65bf7f428bbfe6cb6e
@@ -631,7 +631,7 @@ mimic_set_create_id(VALUE self, VALUE id) {
631
631
  Check_Type(id, T_STRING);
632
632
 
633
633
  if (NULL != oj_default_options.create_id) {
634
- if (oj_json_class != oj_default_options.create_id && NULL != oj_default_options.create_id) {
634
+ if (oj_json_class != oj_default_options.create_id) {
635
635
  xfree((char*)oj_default_options.create_id);
636
636
  }
637
637
  oj_default_options.create_id = NULL;
@@ -418,7 +418,7 @@ read_num(ParseInfo pi) {
418
418
  } else {
419
419
  int dec_cnt = 0;
420
420
  bool zero1 = false;
421
-
421
+
422
422
  for (; '0' <= *pi->cur && *pi->cur <= '9'; pi->cur++) {
423
423
  if (0 == ni.i && '0' == *pi->cur) {
424
424
  zero1 = true;
@@ -607,7 +607,7 @@ oj_parse2(ParseInfo pi) {
607
607
  while (1) {
608
608
  if (0 < pi->max_depth && pi->max_depth <= pi->stack.tail - pi->stack.head - 1) {
609
609
  VALUE err_clas = oj_get_json_err_class("NestingError");
610
-
610
+
611
611
  oj_set_error_at(pi, err_clas, __FILE__, __LINE__, "Too deeply nested.");
612
612
  pi->err_class = err_clas;
613
613
  return;
@@ -729,6 +729,17 @@ oj_parse2(ParseInfo pi) {
729
729
  }
730
730
  }
731
731
 
732
+ static VALUE
733
+ rescue_big_decimal(VALUE str) {
734
+ rb_raise(oj_parse_error_class, "Invalid value for BigDecimal()");
735
+ return Qnil;
736
+ }
737
+
738
+ static VALUE
739
+ parse_big_decimal(VALUE str) {
740
+ return rb_funcall(rb_cObject, oj_bigdecimal_id, 1, str);
741
+ }
742
+
732
743
  VALUE
733
744
  oj_num_as_value(NumInfo ni) {
734
745
  volatile VALUE rnum = Qnil;
@@ -766,7 +777,9 @@ oj_num_as_value(NumInfo ni) {
766
777
  }
767
778
  } else { // decimal
768
779
  if (ni->big) {
769
- rnum = rb_funcall(rb_cObject, oj_bigdecimal_id, 1, rb_str_new(ni->str, ni->len));
780
+ volatile VALUE bd = rb_str_new(ni->str, ni->len);
781
+
782
+ rnum = rb_rescue2(parse_big_decimal, bd, rescue_big_decimal, bd, rb_eException, 0);
770
783
  if (ni->no_big) {
771
784
  rnum = rb_funcall(rnum, rb_intern("to_f"), 0);
772
785
  }
@@ -779,7 +792,9 @@ oj_num_as_value(NumInfo ni) {
779
792
  // 15 digits. This attempts to fix those few cases where this
780
793
  // occurs.
781
794
  if ((long double)INT64_MAX > d && (int64_t)d != (ni->i * ni->div + ni->num)) {
782
- rnum = rb_funcall(rb_cObject, oj_bigdecimal_id, 1, rb_str_new(ni->str, ni->len));
795
+ volatile VALUE bd = rb_str_new(ni->str, ni->len);
796
+
797
+ rnum = rb_rescue2(parse_big_decimal, bd, rescue_big_decimal, bd, rb_eException, 0);
783
798
  if (ni->no_big) {
784
799
  rnum = rb_funcall(rnum, rb_intern("to_f"), 0);
785
800
  }
@@ -833,7 +848,7 @@ oj_set_error_at(ParseInfo pi, VALUE err_clas, const char* file, int line, const
833
848
  break;
834
849
  }
835
850
  p += snprintf(p, end - p, "[%ld]", RARRAY_LEN(vp->val));
836
- }
851
+ }
837
852
  }
838
853
  }
839
854
  *p++ = ')';
@@ -976,12 +991,12 @@ oj_pi_parse(int argc, VALUE *argv, ParseInfo pi, char *json, size_t len, int yie
976
991
  if (0 != line) {
977
992
  VALUE ec = rb_obj_class(rb_errinfo());
978
993
 
979
- if (rb_eIOError != ec) {
980
- goto CLEANUP;
981
- }
982
994
  if (rb_eArgError != ec && 0 != ec) {
983
995
  err_class = ec;
984
996
  }
997
+ if (rb_eIOError != ec) {
998
+ goto CLEANUP;
999
+ }
985
1000
  }
986
1001
  if (NULL != (v = stack_peek(&pi->stack))) {
987
1002
  switch (v->next) {
@@ -633,7 +633,7 @@ create_opt(ROptTable rot, VALUE clas) {
633
633
  ro->dump = dump_to_s;
634
634
  }
635
635
  }
636
- return NULL;
636
+ return ro;
637
637
  }
638
638
 
639
639
  static void
@@ -1,5 +1,5 @@
1
1
 
2
2
  module Oj
3
3
  # Current version of the module.
4
- VERSION = '3.7.8'
4
+ VERSION = '3.7.9'
5
5
  end
@@ -687,8 +687,8 @@ class Juice < Minitest::Test
687
687
 
688
688
  def test_bad_bignum
689
689
  if '2.4.0' < RUBY_VERSION
690
- assert_raises Exception do # Can be either Oj::ParseError or ArgumentError depending on Ruby version
691
- Oj.load(%|{ "big": -e123456789 }|)
690
+ assert_raises Oj::ParseError do
691
+ Oj.load(%|{ "big": -e123456789 }|, mode: :strict)
692
692
  end
693
693
  end
694
694
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: oj
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.7.8
4
+ version: 3.7.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter Ohler
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-01-21 00:00:00.000000000 Z
11
+ date: 2019-02-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake-compiler