oj 3.7.8 → 3.7.9

Sign up to get free protection for your applications and to get access to all the features.
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