stringio 3.1.1 → 3.1.3

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.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/NEWS.md +32 -0
  3. data/ext/stringio/stringio.c +23 -13
  4. metadata +5 -7
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0f8291051ef78bfdd817200ff02c25db3e2fa495d9b4a164c9737511d6eadb38
4
- data.tar.gz: 8593995f8dbb66e6a3dc9f2755f97d0cc05e2d363e6cd027cc15a7d46deaf60f
3
+ metadata.gz: 53f93bd2c66c51afc07b243b140794c10300067651cd29caae8abbda0f8c67dc
4
+ data.tar.gz: 05ec27cf31975fb899df94db40aa310bcea567cd3d3139348334ee62980fae81
5
5
  SHA512:
6
- metadata.gz: 5060643c29e66ccc88df7a7ab4c19943d89ce3779641b9be7e0cfc61ce79db7c53af06367875b1892b80f31d98be32d10da2590445cb86425b7d89f285a30b5f
7
- data.tar.gz: 1a6dcf694eaa38dd0d939b8db9cb4f29cc96db93ac545f5f06d6354ad5e75f92fb9807f529f54ae6801a3f791e7139db7ad371bf8efd6b7ca34f45f61fb10429
6
+ metadata.gz: 0775a86fb9144d9c8baf319717b06ed4932aa04a6eecddfdc62ca25bb2be574938c28a750766848e138918f553383345ab46b38856083dbafbb651d86169c918
7
+ data.tar.gz: b255d4b82939a69f1dbd12f152b8cfa9b9f6c1c4b78fd40a2bec3a22b6e40e7536430c940c5e19800815bbce7fd48c2f1bc5acf88368ed7b63aa0836a88f8ddb
data/NEWS.md CHANGED
@@ -1,5 +1,37 @@
1
1
  # News
2
2
 
3
+ ## 3.1.3 - 2025-02-14
4
+
5
+ ### Fixes
6
+
7
+ * JRuby: Fixed a bug that JRuby may not be able to be started
8
+ * GH-112
9
+ * GH-113
10
+ * Reported by Karol Bucek
11
+
12
+ ### Thanks
13
+
14
+ * Karol Bucek
15
+
16
+ ## 3.1.2 - 2024-11-07
17
+
18
+ ### Improvements
19
+
20
+ * JRuby: Added support for detecting encoding by BOM.
21
+ * GH-100
22
+ * GH-101
23
+
24
+ ### Fixes
25
+
26
+ * CRuby: Fixed a bug that unknown memory may be used by
27
+ `StringIO#ungetc`/`StringIO#ungetbyte`.
28
+ * https://hackerone.com/reports/2805165
29
+ * Reported by manun.
30
+
31
+ ### Thanks
32
+
33
+ * manun
34
+
3
35
  ## 3.1.1 - 2024-06-13
4
36
 
5
37
  ### Improvements
@@ -13,7 +13,7 @@
13
13
  **********************************************************************/
14
14
 
15
15
  static const char *const
16
- STRINGIO_VERSION = "3.1.1";
16
+ STRINGIO_VERSION = "3.1.3";
17
17
 
18
18
  #include <stdbool.h>
19
19
 
@@ -930,6 +930,18 @@ strio_extend(struct StringIO *ptr, long pos, long len)
930
930
  }
931
931
  }
932
932
 
933
+ static void
934
+ strio_unget_string(struct StringIO *ptr, VALUE c)
935
+ {
936
+ const char *cp = NULL;
937
+ long cl = RSTRING_LEN(c);
938
+ if (cl > 0) {
939
+ if (c != ptr->string) cp = RSTRING_PTR(c);
940
+ strio_unget_bytes(ptr, cp, cl);
941
+ RB_GC_GUARD(c);
942
+ }
943
+ }
944
+
933
945
  /*
934
946
  * call-seq:
935
947
  * ungetc(character) -> nil
@@ -952,19 +964,22 @@ strio_ungetc(VALUE self, VALUE c)
952
964
 
953
965
  enc = rb_enc_get(ptr->string);
954
966
  len = rb_enc_codelen(cc, enc);
955
- if (len <= 0) rb_enc_uint_chr(cc, enc);
967
+ if (len <= 0) {
968
+ rb_enc_uint_chr(cc, enc); /* to raise an exception */
969
+ UNREACHABLE;
970
+ }
956
971
  rb_enc_mbcput(cc, buf, enc);
957
972
  return strio_unget_bytes(ptr, buf, len);
958
973
  }
959
974
  else {
960
- SafeStringValue(c);
975
+ StringValue(c);
976
+ if (RSTRING_LEN(c) == 0) return Qnil;
961
977
  enc = rb_enc_get(ptr->string);
962
978
  enc2 = rb_enc_get(c);
963
979
  if (enc != enc2 && enc != rb_ascii8bit_encoding()) {
964
980
  c = rb_str_conv_enc(c, enc2, enc);
965
981
  }
966
- strio_unget_bytes(ptr, RSTRING_PTR(c), RSTRING_LEN(c));
967
- RB_GC_GUARD(c);
982
+ strio_unget_string(ptr, c);
968
983
  return Qnil;
969
984
  }
970
985
  }
@@ -991,13 +1006,8 @@ strio_ungetbyte(VALUE self, VALUE c)
991
1006
  strio_unget_bytes(ptr, &cc, 1);
992
1007
  }
993
1008
  else {
994
- long cl;
995
- SafeStringValue(c);
996
- cl = RSTRING_LEN(c);
997
- if (cl > 0) {
998
- strio_unget_bytes(ptr, RSTRING_PTR(c), cl);
999
- RB_GC_GUARD(c);
1000
- }
1009
+ StringValue(c);
1010
+ strio_unget_string(ptr, c);
1001
1011
  }
1002
1012
  return Qnil;
1003
1013
  }
@@ -1028,7 +1038,7 @@ strio_unget_bytes(struct StringIO *ptr, const char *cp, long cl)
1028
1038
  if (rest > cl) memset(s + len, 0, rest - cl);
1029
1039
  pos -= cl;
1030
1040
  }
1031
- memcpy(s + pos, cp, cl);
1041
+ memcpy(s + pos, (cp ? cp : s), cl);
1032
1042
  ptr->pos = pos;
1033
1043
  return Qnil;
1034
1044
  }
metadata CHANGED
@@ -1,15 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stringio
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.1.1
4
+ version: 3.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nobu Nakada
8
8
  - Charles Oliver Nutter
9
- autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2024-06-13 00:00:00.000000000 Z
11
+ date: 2025-02-14 00:00:00.000000000 Z
13
12
  dependencies: []
14
13
  description: Pseudo `IO` class from/to `String`.
15
14
  email:
@@ -42,8 +41,8 @@ homepage: https://github.com/ruby/stringio
42
41
  licenses:
43
42
  - Ruby
44
43
  - BSD-2-Clause
45
- metadata: {}
46
- post_install_message:
44
+ metadata:
45
+ changelog_uri: https://github.com/ruby/stringio/releases/tag/v3.1.3
47
46
  rdoc_options: []
48
47
  require_paths:
49
48
  - lib
@@ -58,8 +57,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
58
57
  - !ruby/object:Gem::Version
59
58
  version: '0'
60
59
  requirements: []
61
- rubygems_version: 3.5.11
62
- signing_key:
60
+ rubygems_version: 3.6.2
63
61
  specification_version: 4
64
62
  summary: Pseudo IO on String
65
63
  test_files: []