psych 5.3.0 → 5.4.0

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: c76501960d9e1f76da817745bcf5b6b5d34ba5f6c33802b742035682a5a062d3
4
- data.tar.gz: dc5219b7de7a7fcde49f94123dbea690ce8fd31374ed5070f48a1b2a281c86bf
3
+ metadata.gz: 289d2a9532c36be34f187b80d36eb98ebac368da3539a44e8e6e291bc7f184eb
4
+ data.tar.gz: d717de45e2a5519d4a2c27a26a2e1aed7269e1c80b5213a19c070f1d56712a03
5
5
  SHA512:
6
- metadata.gz: 25a56e306eb46df408a9a0b34100e2f825adf8ae1dffeb85c4ce2ab35544c33a94de8c2a91d4e1a5f59c6cfeaa18ee1b97d53bc2d8536657f3d671344ba3827d
7
- data.tar.gz: 63cd6890821bf311ca8bbce351e137390f592619eeb7bb912b8926cb6e31f22750e95ecd083eab392c62903095359acd1fff18623cb36d00eae195fabf4f7b10
6
+ metadata.gz: d00bc06b2fd173ea66dbb8f7b5a5ad75ad6074eff6f011d9d9774ef33662a0c0e642f0dd4daa67776b1a89fdb54854932809351b12052eea00c69b9499792639
7
+ data.tar.gz: 27428cdb1bce30907b2654310632967274e1bb2dd43a5a7e634577cf797911b4931b4165e57c8e6545e08f1e9c9979be18600ed3d9a589e52d7df5360b7689f3
data/README.md CHANGED
@@ -26,8 +26,8 @@ Psych.dump("foo") # => "--- foo\n...\n"
26
26
 
27
27
  ## Installation
28
28
 
29
- Psych has been included with MRI since 1.9.2, and is the default YAML parser
30
- in 1.9.3.
29
+ Psych has been included with MRI since 1.9.2, and has been the default YAML parser
30
+ since 1.9.3.
31
31
 
32
32
  If you want a newer gem release of Psych, you can use RubyGems:
33
33
 
@@ -32,9 +32,20 @@ static int io_reader(void * data, unsigned char *buf, size_t size, size_t *read)
32
32
  *read = 0;
33
33
 
34
34
  if(! NIL_P(string)) {
35
- void * str = (void *)StringValuePtr(string);
36
- *read = (size_t)RSTRING_LEN(string);
37
- memcpy(buf, str, *read);
35
+ char * str = StringValuePtr(string);
36
+ size_t len = (size_t)RSTRING_LEN(string);
37
+
38
+ /* IO#read(size) is documented to return at most `size` bytes, but a
39
+ * misbehaving IO-like object may return more. Clamp the copy to the
40
+ * buffer libyaml gave us to avoid writing past its end, rounding down
41
+ * to a character boundary so a multibyte character is never split. */
42
+ if(len > size) {
43
+ rb_encoding * enc = rb_enc_get(string);
44
+ len = (size_t)(rb_enc_left_char_head(str, str + size, str + len, enc) - str);
45
+ }
46
+
47
+ *read = len;
48
+ memcpy(buf, str, len);
38
49
  }
39
50
 
40
51
  return 1;
@@ -28,12 +28,6 @@ static VALUE path2class(VALUE self, VALUE path)
28
28
  return rb_path_to_class(path);
29
29
  }
30
30
 
31
- static VALUE init_data(VALUE self, VALUE data, VALUE values)
32
- {
33
- rb_struct_initialize(data, values);
34
- return data;
35
- }
36
-
37
31
  void Init_psych_to_ruby(void)
38
32
  {
39
33
  VALUE psych = rb_define_module("Psych");
@@ -43,7 +37,6 @@ void Init_psych_to_ruby(void)
43
37
  VALUE visitor = rb_define_class_under(visitors, "Visitor", rb_cObject);
44
38
  cPsychVisitorsToRuby = rb_define_class_under(visitors, "ToRuby", visitor);
45
39
 
46
- rb_define_private_method(cPsychVisitorsToRuby, "init_data", init_data, 2);
47
40
  rb_define_private_method(cPsychVisitorsToRuby, "build_exception", build_exception, 2);
48
41
  rb_define_private_method(class_loader, "path2class", path2class, 1);
49
42
  }
@@ -2,9 +2,9 @@
2
2
 
3
3
  module Psych
4
4
  # The version of Psych you are using
5
- VERSION = '5.3.0'
5
+ VERSION = '5.4.0'
6
6
 
7
7
  if RUBY_ENGINE == 'jruby'
8
- DEFAULT_SNAKEYAML_VERSION = '2.9'.freeze
8
+ DEFAULT_SNAKEYAML_VERSION = '2.10'.freeze
9
9
  end
10
10
  end
@@ -12,6 +12,10 @@ module Psych
12
12
  ###
13
13
  # This class walks a YAML AST, converting each node to Ruby
14
14
  class ToRuby < Psych::Visitors::Visitor
15
+ unless RUBY_VERSION < "3.2"
16
+ DATA_INITIALIZE = Data.instance_method(:initialize)
17
+ end
18
+
15
19
  def self.create(symbolize_names: false, freeze: false, strict_integer: false, parse_symbols: true)
16
20
  class_loader = ClassLoader.new
17
21
  scanner = ScalarScanner.new class_loader, strict_integer: strict_integer, parse_symbols: parse_symbols
@@ -219,8 +223,7 @@ module Psych
219
223
  revive_data_members(members, o)
220
224
  end
221
225
  data ||= allocate_anon_data(o, members)
222
- values = data.members.map { |m| members[m] }
223
- init_data(data, values)
226
+ DATA_INITIALIZE.bind_call(data, **members)
224
227
  data.freeze
225
228
  data
226
229
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: psych
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.3.0
4
+ version: 5.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aaron Patterson