stringio 3.1.1 → 3.1.3

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