zlib 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (6) hide show
  1. checksums.yaml +5 -5
  2. data/.travis.yml +3 -2
  3. data/README.md +1 -1
  4. data/ext/zlib/zlib.c +156 -125
  5. data/zlib.gemspec +12 -2
  6. metadata +3 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: e2d28dc0bcac8345db3a2f65229fc3ac5d3130e7
4
- data.tar.gz: 23ac52950f8d7417ad3505300fb706a908eeda97
2
+ SHA256:
3
+ metadata.gz: 19ba8efdb32fca21018696b5c7c2daf46ac6be20d4eeac8c084bdd416f36d97a
4
+ data.tar.gz: c8aa54b4af9ced56c043853a85c948f736030a6d1cc1b2bd3693164d0a9b944c
5
5
  SHA512:
6
- metadata.gz: fb489611bdaf16c1c20804d28fae2c3f28c0a9a5a9cecc54996cad555653d447a74060ed087b0edfe186fc8de06de65d61b93fe657f8ed8c5364329606061193
7
- data.tar.gz: 10f5154d4e3f5f085b2aa32cb4d933842fc528892ed671031e9b35e818f0af9d427b0187de43d44c1b59873fef8dc4c8441ca431f3de78c0e25f6a2aa80503d0
6
+ metadata.gz: fad984e401f53eba898295296b1a8dfaf7f5035c60c2e720501f03871ba3ba617167d093e6d17c4075bca2da2e838445367d0271fca7bff549ed3a8e0cc33a6b
7
+ data.tar.gz: 2b59bdabdba6fa6a09c31dc1ba1fe01110ef4ed775c41e8f386091ab547a874f5398603437817a66641ce99f2d083cbdf515a339765da7c615d648080ba1abdd
@@ -1,7 +1,8 @@
1
1
  sudo: false
2
2
  language: ruby
3
3
  rvm:
4
- - 2.3.5
5
- - 2.4.2
4
+ - 2.3.6
5
+ - 2.4.3
6
+ - 2.5.0
6
7
  - ruby-head
7
8
  before_install: gem install bundler
data/README.md CHANGED
@@ -34,7 +34,7 @@ Or install it yourself as:
34
34
 
35
35
  Using the wrapper to compress strings with default parameters is quite simple:
36
36
 
37
- ```
37
+ ```ruby
38
38
  require "zlib"
39
39
 
40
40
  data_to_compress = File.read("don_quixote.txt")
@@ -25,7 +25,11 @@
25
25
  # define VALGRIND_MAKE_MEM_UNDEFINED(p, n) 0
26
26
  #endif
27
27
 
28
- #define RUBY_ZLIB_VERSION "0.6.0"
28
+ #define RUBY_ZLIB_VERSION "1.1.0"
29
+
30
+ #ifndef RB_PASS_CALLED_KEYWORDS
31
+ # define rb_class_new_instance_kw(argc, argv, klass, kw_splat) rb_class_new_instance(argc, argv, klass)
32
+ #endif
29
33
 
30
34
  #ifndef GZIP_SUPPORT
31
35
  #define GZIP_SUPPORT 1
@@ -85,6 +89,7 @@ static void zstream_passthrough_input(struct zstream*);
85
89
  static VALUE zstream_detach_input(struct zstream*);
86
90
  static void zstream_reset(struct zstream*);
87
91
  static VALUE zstream_end(struct zstream*);
92
+ static VALUE zstream_ensure_end(VALUE v);
88
93
  static void zstream_run(struct zstream*, Bytef*, long, int);
89
94
  static VALUE zstream_sync(struct zstream*, Bytef*, long);
90
95
  static void zstream_mark(void*);
@@ -140,19 +145,19 @@ static void gzfile_reset(struct gzfile*);
140
145
  static void gzfile_close(struct gzfile*, int);
141
146
  static void gzfile_write_raw(struct gzfile*);
142
147
  static VALUE gzfile_read_raw_partial(VALUE);
143
- static VALUE gzfile_read_raw_rescue(VALUE);
144
- static VALUE gzfile_read_raw(struct gzfile*);
145
- static int gzfile_read_raw_ensure(struct gzfile*, long);
148
+ static VALUE gzfile_read_raw_rescue(VALUE,VALUE);
149
+ static VALUE gzfile_read_raw(struct gzfile*, VALUE outbuf);
150
+ static int gzfile_read_raw_ensure(struct gzfile*, long, VALUE outbuf);
146
151
  static char *gzfile_read_raw_until_zero(struct gzfile*, long);
147
152
  static unsigned int gzfile_get16(const unsigned char*);
148
153
  static unsigned long gzfile_get32(const unsigned char*);
149
154
  static void gzfile_set32(unsigned long n, unsigned char*);
150
155
  static void gzfile_make_header(struct gzfile*);
151
156
  static void gzfile_make_footer(struct gzfile*);
152
- static void gzfile_read_header(struct gzfile*);
153
- static void gzfile_check_footer(struct gzfile*);
157
+ static void gzfile_read_header(struct gzfile*, VALUE outbuf);
158
+ static void gzfile_check_footer(struct gzfile*, VALUE outbuf);
154
159
  static void gzfile_write(struct gzfile*, Bytef*, long);
155
- static long gzfile_read_more(struct gzfile*);
160
+ static long gzfile_read_more(struct gzfile*, VALUE outbuf);
156
161
  static void gzfile_calc_crc(struct gzfile*, VALUE);
157
162
  static VALUE gzfile_read(struct gzfile*, long);
158
163
  static VALUE gzfile_read_all(struct gzfile*);
@@ -360,11 +365,7 @@ finalizer_warn(const char *msg)
360
365
  static VALUE
361
366
  rb_zlib_version(VALUE klass)
362
367
  {
363
- VALUE str;
364
-
365
- str = rb_str_new2(zlibVersion());
366
- OBJ_TAINT(str); /* for safe */
367
- return str;
368
+ return rb_str_new2(zlibVersion());
368
369
  }
369
370
 
370
371
  #if SIZEOF_LONG > SIZEOF_INT
@@ -627,10 +628,8 @@ zstream_expand_buffer(struct zstream *z)
627
628
  long buf_filled = ZSTREAM_BUF_FILLED(z);
628
629
  if (buf_filled >= ZSTREAM_AVAIL_OUT_STEP_MAX) {
629
630
  int state = 0;
630
- VALUE self = (VALUE)z->stream.opaque;
631
631
 
632
632
  rb_obj_reveal(z->buf, rb_cString);
633
- OBJ_INFECT(z->buf, self);
634
633
 
635
634
  rb_protect(rb_yield, z->buf, &state);
636
635
 
@@ -738,7 +737,7 @@ zstream_append_buffer(struct zstream *z, const Bytef *src, long len)
738
737
  static VALUE
739
738
  zstream_detach_buffer(struct zstream *z)
740
739
  {
741
- VALUE dst, self = (VALUE)z->stream.opaque;
740
+ VALUE dst;
742
741
 
743
742
  if (!ZSTREAM_IS_FINISHED(z) && !ZSTREAM_IS_GZFILE(z) &&
744
743
  rb_block_given_p()) {
@@ -755,8 +754,6 @@ zstream_detach_buffer(struct zstream *z)
755
754
  rb_obj_reveal(dst, rb_cString);
756
755
  }
757
756
 
758
- OBJ_INFECT(dst, self);
759
-
760
757
  z->buf = Qnil;
761
758
  z->stream.next_out = 0;
762
759
  z->stream.avail_out = 0;
@@ -845,19 +842,50 @@ zstream_append_input(struct zstream *z, const Bytef *src, long len)
845
842
  static void
846
843
  zstream_discard_input(struct zstream *z, long len)
847
844
  {
848
- if (NIL_P(z->input) || RSTRING_LEN(z->input) <= len) {
849
- z->input = Qnil;
845
+ if (NIL_P(z->input)) {
850
846
  }
851
- else {
852
- z->input = rb_str_substr(z->input, len,
853
- RSTRING_LEN(z->input) - len);
847
+ else if (RBASIC_CLASS(z->input) == 0) {
848
+ /* hidden, we created z->input and have complete control */
849
+ char *ptr;
850
+ long oldlen, newlen;
851
+
852
+ RSTRING_GETMEM(z->input, ptr, oldlen);
853
+ newlen = oldlen - len;
854
+ if (newlen > 0) {
855
+ memmove(ptr, ptr + len, newlen);
856
+ }
857
+ if (newlen < 0) {
858
+ newlen = 0;
859
+ }
860
+ rb_str_resize(z->input, newlen);
861
+ if (newlen == 0) {
862
+ rb_gc_force_recycle(z->input);
863
+ z->input = Qnil;
864
+ }
865
+ else {
866
+ rb_str_set_len(z->input, newlen);
867
+ }
868
+ }
869
+ else { /* do not mangle user-provided data */
870
+ if (RSTRING_LEN(z->input) <= len) {
871
+ z->input = Qnil;
872
+ }
873
+ else {
874
+ z->input = rb_str_substr(z->input, len,
875
+ RSTRING_LEN(z->input) - len);
876
+ }
854
877
  }
855
878
  }
856
879
 
857
880
  static void
858
881
  zstream_reset_input(struct zstream *z)
859
882
  {
860
- z->input = Qnil;
883
+ if (!NIL_P(z->input) && RBASIC_CLASS(z->input) == 0) {
884
+ rb_str_resize(z->input, 0);
885
+ }
886
+ else {
887
+ z->input = Qnil;
888
+ }
861
889
  }
862
890
 
863
891
  static void
@@ -882,7 +910,6 @@ zstream_detach_input(struct zstream *z)
882
910
  rb_obj_reveal(dst, rb_cString);
883
911
  }
884
912
  z->input = Qnil;
885
- rb_obj_reveal(dst, rb_cString);
886
913
  return dst;
887
914
  }
888
915
 
@@ -925,6 +952,12 @@ zstream_end(struct zstream *z)
925
952
  return Qnil;
926
953
  }
927
954
 
955
+ static VALUE
956
+ zstream_ensure_end(VALUE v)
957
+ {
958
+ return zstream_end((struct zstream *)v);
959
+ }
960
+
928
961
  static void *
929
962
  zstream_run_func(void *ptr)
930
963
  {
@@ -981,6 +1014,7 @@ zstream_run_func(void *ptr)
981
1014
 
982
1015
  /*
983
1016
  * There is no safe way to interrupt z->run->func().
1017
+ * async-signal-safe
984
1018
  */
985
1019
  static void
986
1020
  zstream_unblock_func(void *ptr)
@@ -995,7 +1029,7 @@ zstream_run(struct zstream *z, Bytef *src, long len, int flush)
995
1029
  {
996
1030
  struct zstream_run_args args;
997
1031
  int err;
998
- VALUE guard = Qnil;
1032
+ VALUE old_input = Qnil;
999
1033
 
1000
1034
  args.z = z;
1001
1035
  args.flush = flush;
@@ -1009,12 +1043,13 @@ zstream_run(struct zstream *z, Bytef *src, long len, int flush)
1009
1043
  }
1010
1044
  else {
1011
1045
  zstream_append_input(z, src, len);
1012
- z->stream.next_in = (Bytef*)RSTRING_PTR(z->input);
1013
- z->stream.avail_in = MAX_UINT(RSTRING_LEN(z->input));
1014
1046
  /* keep reference to `z->input' so as not to be garbage collected
1015
1047
  after zstream_reset_input() and prevent `z->stream.next_in'
1016
1048
  from dangling. */
1017
- guard = z->input;
1049
+ old_input = zstream_detach_input(z);
1050
+ rb_obj_hide(old_input); /* for GVL release and later recycle */
1051
+ z->stream.next_in = (Bytef*)RSTRING_PTR(old_input);
1052
+ z->stream.avail_in = MAX_UINT(RSTRING_LEN(old_input));
1018
1053
  }
1019
1054
 
1020
1055
  if (z->stream.avail_out == 0) {
@@ -1022,8 +1057,14 @@ zstream_run(struct zstream *z, Bytef *src, long len, int flush)
1022
1057
  }
1023
1058
 
1024
1059
  loop:
1060
+ #ifndef RB_NOGVL_UBF_ASYNC_SAFE
1025
1061
  err = (int)(VALUE)rb_thread_call_without_gvl(zstream_run_func, (void *)&args,
1026
1062
  zstream_unblock_func, (void *)&args);
1063
+ #else
1064
+ err = (int)(VALUE)rb_nogvl(zstream_run_func, (void *)&args,
1065
+ zstream_unblock_func, (void *)&args,
1066
+ RB_NOGVL_UBF_ASYNC_SAFE);
1067
+ #endif
1027
1068
 
1028
1069
  if (flush != Z_FINISH && err == Z_BUF_ERROR
1029
1070
  && z->stream.avail_out > 0) {
@@ -1052,7 +1093,10 @@ loop:
1052
1093
 
1053
1094
  if (z->stream.avail_in > 0) {
1054
1095
  zstream_append_input(z, z->stream.next_in, z->stream.avail_in);
1055
- RB_GC_GUARD(guard); /* prevent tail call to make guard effective */
1096
+ }
1097
+ if (!NIL_P(old_input)) {
1098
+ rb_str_resize(old_input, 0);
1099
+ rb_gc_force_recycle(old_input);
1056
1100
  }
1057
1101
 
1058
1102
  if (args.jump_state)
@@ -1285,7 +1329,6 @@ rb_zstream_flush_next_in(VALUE obj)
1285
1329
 
1286
1330
  TypedData_Get_Struct(obj, struct zstream, &zstream_data_type, z);
1287
1331
  dst = zstream_detach_input(z);
1288
- OBJ_INFECT(dst, obj);
1289
1332
  return dst;
1290
1333
  }
1291
1334
 
@@ -1604,9 +1647,8 @@ rb_deflate_s_deflate(int argc, VALUE *argv, VALUE klass)
1604
1647
 
1605
1648
  args[0] = (VALUE)&z;
1606
1649
  args[1] = src;
1607
- dst = rb_ensure(deflate_run, (VALUE)args, zstream_end, (VALUE)&z);
1650
+ dst = rb_ensure(deflate_run, (VALUE)args, zstream_ensure_end, (VALUE)&z);
1608
1651
 
1609
- OBJ_INFECT(dst, src);
1610
1652
  return dst;
1611
1653
  }
1612
1654
 
@@ -1656,7 +1698,6 @@ rb_deflate_deflate(int argc, VALUE *argv, VALUE obj)
1656
1698
  VALUE src, flush;
1657
1699
 
1658
1700
  rb_scan_args(argc, argv, "11", &src, &flush);
1659
- OBJ_INFECT(obj, src);
1660
1701
  do_deflate(z, src, ARG_FLUSH(flush));
1661
1702
 
1662
1703
  return zstream_detach_buffer(z);
@@ -1674,7 +1715,6 @@ rb_deflate_deflate(int argc, VALUE *argv, VALUE obj)
1674
1715
  static VALUE
1675
1716
  rb_deflate_addstr(VALUE obj, VALUE src)
1676
1717
  {
1677
- OBJ_INFECT(obj, src);
1678
1718
  do_deflate(get_zstream(obj), src, Z_NO_FLUSH);
1679
1719
  return obj;
1680
1720
  }
@@ -1774,7 +1814,6 @@ rb_deflate_set_dictionary(VALUE obj, VALUE dic)
1774
1814
  VALUE src = dic;
1775
1815
  int err;
1776
1816
 
1777
- OBJ_INFECT(obj, dic);
1778
1817
  StringValue(src);
1779
1818
  err = deflateSetDictionary(&z->stream,
1780
1819
  (Bytef*)RSTRING_PTR(src), RSTRING_LENINT(src));
@@ -1919,9 +1958,8 @@ rb_inflate_s_inflate(VALUE obj, VALUE src)
1919
1958
 
1920
1959
  args[0] = (VALUE)&z;
1921
1960
  args[1] = src;
1922
- dst = rb_ensure(inflate_run, (VALUE)args, zstream_end, (VALUE)&z);
1961
+ dst = rb_ensure(inflate_run, (VALUE)args, zstream_ensure_end, (VALUE)&z);
1923
1962
 
1924
- OBJ_INFECT(dst, src);
1925
1963
  return dst;
1926
1964
  }
1927
1965
 
@@ -2001,8 +2039,6 @@ rb_inflate_inflate(VALUE obj, VALUE src)
2001
2039
  struct zstream *z = get_zstream(obj);
2002
2040
  VALUE dst;
2003
2041
 
2004
- OBJ_INFECT(obj, src);
2005
-
2006
2042
  if (ZSTREAM_IS_FINISHED(z)) {
2007
2043
  if (NIL_P(src)) {
2008
2044
  dst = zstream_detach_buffer(z);
@@ -2011,7 +2047,6 @@ rb_inflate_inflate(VALUE obj, VALUE src)
2011
2047
  StringValue(src);
2012
2048
  zstream_append_buffer2(z, src);
2013
2049
  dst = rb_str_new(0, 0);
2014
- OBJ_INFECT(dst, obj);
2015
2050
  }
2016
2051
  }
2017
2052
  else {
@@ -2037,8 +2072,6 @@ rb_inflate_addstr(VALUE obj, VALUE src)
2037
2072
  {
2038
2073
  struct zstream *z = get_zstream(obj);
2039
2074
 
2040
- OBJ_INFECT(obj, src);
2041
-
2042
2075
  if (ZSTREAM_IS_FINISHED(z)) {
2043
2076
  if (!NIL_P(src)) {
2044
2077
  StringValue(src);
@@ -2068,7 +2101,6 @@ rb_inflate_sync(VALUE obj, VALUE src)
2068
2101
  {
2069
2102
  struct zstream *z = get_zstream(obj);
2070
2103
 
2071
- OBJ_INFECT(obj, src);
2072
2104
  StringValue(src);
2073
2105
  return zstream_sync(z, (Bytef*)RSTRING_PTR(src), RSTRING_LEN(src));
2074
2106
  }
@@ -2110,7 +2142,6 @@ rb_inflate_set_dictionary(VALUE obj, VALUE dic)
2110
2142
  VALUE src = dic;
2111
2143
  int err;
2112
2144
 
2113
- OBJ_INFECT(obj, dic);
2114
2145
  StringValue(src);
2115
2146
  err = inflateSetDictionary(&z->stream,
2116
2147
  (Bytef*)RSTRING_PTR(src), RSTRING_LENINT(src));
@@ -2191,7 +2222,6 @@ struct gzfile {
2191
2222
  rb_encoding *enc2;
2192
2223
  rb_econv_t *ec;
2193
2224
  VALUE ecopts;
2194
- char *cbuf;
2195
2225
  VALUE path;
2196
2226
  };
2197
2227
  #define GZFILE_CBUF_CAPA 10
@@ -2199,12 +2229,23 @@ struct gzfile {
2199
2229
  #define GZFILE_FLAG_SYNC ZSTREAM_FLAG_UNUSED
2200
2230
  #define GZFILE_FLAG_HEADER_FINISHED (ZSTREAM_FLAG_UNUSED << 1)
2201
2231
  #define GZFILE_FLAG_FOOTER_FINISHED (ZSTREAM_FLAG_UNUSED << 2)
2232
+ #define GZFILE_FLAG_MTIME_IS_SET (ZSTREAM_FLAG_UNUSED << 3)
2202
2233
 
2203
2234
  #define GZFILE_IS_FINISHED(gz) \
2204
2235
  (ZSTREAM_IS_FINISHED(&(gz)->z) && ZSTREAM_BUF_FILLED(&(gz)->z) == 0)
2205
2236
 
2206
2237
  #define GZFILE_READ_SIZE 2048
2207
2238
 
2239
+ struct read_raw_arg {
2240
+ VALUE io;
2241
+ union {
2242
+ const VALUE argv[2]; /* for rb_funcallv */
2243
+ struct {
2244
+ VALUE len;
2245
+ VALUE buf;
2246
+ } in;
2247
+ } as;
2248
+ };
2208
2249
 
2209
2250
  static void
2210
2251
  gzfile_mark(void *p)
@@ -2231,22 +2272,13 @@ gzfile_free(void *p)
2231
2272
  }
2232
2273
  zstream_finalize(z);
2233
2274
  }
2234
- if (gz->cbuf) {
2235
- xfree(gz->cbuf);
2236
- }
2237
2275
  xfree(gz);
2238
2276
  }
2239
2277
 
2240
2278
  static size_t
2241
2279
  gzfile_memsize(const void *p)
2242
2280
  {
2243
- const struct gzfile *gz = p;
2244
- size_t size = sizeof(struct gzfile);
2245
-
2246
- if (gz->cbuf)
2247
- size += GZFILE_CBUF_CAPA;
2248
-
2249
- return size;
2281
+ return sizeof(struct gzfile);
2250
2282
  }
2251
2283
 
2252
2284
  static const rb_data_type_t gzfile_data_type = {
@@ -2275,7 +2307,6 @@ gzfile_init(struct gzfile *gz, const struct zstream_funcs *funcs, void (*endfunc
2275
2307
  gz->ec = NULL;
2276
2308
  gz->ecflags = 0;
2277
2309
  gz->ecopts = Qnil;
2278
- gz->cbuf = 0;
2279
2310
  gz->path = Qnil;
2280
2311
  }
2281
2312
 
@@ -2329,7 +2360,6 @@ gzfile_write_raw(struct gzfile *gz)
2329
2360
 
2330
2361
  if (ZSTREAM_BUF_FILLED(&gz->z) > 0) {
2331
2362
  str = zstream_detach_buffer(&gz->z);
2332
- OBJ_TAINT(str); /* for safe */
2333
2363
  rb_funcall(gz->io, id_write, 1, str);
2334
2364
  if ((gz->z.flags & GZFILE_FLAG_SYNC)
2335
2365
  && rb_respond_to(gz->io, id_flush))
@@ -2340,21 +2370,23 @@ gzfile_write_raw(struct gzfile *gz)
2340
2370
  static VALUE
2341
2371
  gzfile_read_raw_partial(VALUE arg)
2342
2372
  {
2343
- struct gzfile *gz = (struct gzfile*)arg;
2373
+ struct read_raw_arg *ra = (struct read_raw_arg *)arg;
2344
2374
  VALUE str;
2375
+ int argc = NIL_P(ra->as.argv[1]) ? 1 : 2;
2345
2376
 
2346
- str = rb_funcall(gz->io, id_readpartial, 1, INT2FIX(GZFILE_READ_SIZE));
2377
+ str = rb_funcallv(ra->io, id_readpartial, argc, ra->as.argv);
2347
2378
  Check_Type(str, T_STRING);
2348
2379
  return str;
2349
2380
  }
2350
2381
 
2351
2382
  static VALUE
2352
- gzfile_read_raw_rescue(VALUE arg)
2383
+ gzfile_read_raw_rescue(VALUE arg, VALUE _)
2353
2384
  {
2354
- struct gzfile *gz = (struct gzfile*)arg;
2385
+ struct read_raw_arg *ra = (struct read_raw_arg *)arg;
2355
2386
  VALUE str = Qnil;
2356
2387
  if (rb_obj_is_kind_of(rb_errinfo(), rb_eNoMethodError)) {
2357
- str = rb_funcall(gz->io, id_read, 1, INT2FIX(GZFILE_READ_SIZE));
2388
+ int argc = NIL_P(ra->as.argv[1]) ? 1 : 2;
2389
+ str = rb_funcallv(ra->io, id_read, argc, ra->as.argv);
2358
2390
  if (!NIL_P(str)) {
2359
2391
  Check_Type(str, T_STRING);
2360
2392
  }
@@ -2363,15 +2395,21 @@ gzfile_read_raw_rescue(VALUE arg)
2363
2395
  }
2364
2396
 
2365
2397
  static VALUE
2366
- gzfile_read_raw(struct gzfile *gz)
2398
+ gzfile_read_raw(struct gzfile *gz, VALUE outbuf)
2367
2399
  {
2368
- return rb_rescue2(gzfile_read_raw_partial, (VALUE)gz,
2369
- gzfile_read_raw_rescue, (VALUE)gz,
2400
+ struct read_raw_arg ra;
2401
+
2402
+ ra.io = gz->io;
2403
+ ra.as.in.len = INT2FIX(GZFILE_READ_SIZE);
2404
+ ra.as.in.buf = outbuf;
2405
+
2406
+ return rb_rescue2(gzfile_read_raw_partial, (VALUE)&ra,
2407
+ gzfile_read_raw_rescue, (VALUE)&ra,
2370
2408
  rb_eEOFError, rb_eNoMethodError, (VALUE)0);
2371
2409
  }
2372
2410
 
2373
2411
  static int
2374
- gzfile_read_raw_ensure(struct gzfile *gz, long size)
2412
+ gzfile_read_raw_ensure(struct gzfile *gz, long size, VALUE outbuf)
2375
2413
  {
2376
2414
  VALUE str;
2377
2415
 
@@ -2380,7 +2418,7 @@ gzfile_read_raw_ensure(struct gzfile *gz, long size)
2380
2418
  rb_raise(cGzError, "unexpected end of string");
2381
2419
  }
2382
2420
  while (NIL_P(gz->z.input) || RSTRING_LEN(gz->z.input) < size) {
2383
- str = gzfile_read_raw(gz);
2421
+ str = gzfile_read_raw(gz, outbuf);
2384
2422
  if (NIL_P(str)) return 0;
2385
2423
  zstream_append_input2(&gz->z, str);
2386
2424
  }
@@ -2397,7 +2435,7 @@ gzfile_read_raw_until_zero(struct gzfile *gz, long offset)
2397
2435
  p = memchr(RSTRING_PTR(gz->z.input) + offset, '\0',
2398
2436
  RSTRING_LEN(gz->z.input) - offset);
2399
2437
  if (p) break;
2400
- str = gzfile_read_raw(gz);
2438
+ str = gzfile_read_raw(gz, Qnil);
2401
2439
  if (NIL_P(str)) {
2402
2440
  rb_raise(cGzError, "unexpected end of file");
2403
2441
  }
@@ -2478,7 +2516,7 @@ gzfile_make_header(struct gzfile *gz)
2478
2516
  if (!NIL_P(gz->comment)) {
2479
2517
  flags |= GZ_FLAG_COMMENT;
2480
2518
  }
2481
- if (gz->mtime == 0) {
2519
+ if (!(gz->z.flags & GZFILE_FLAG_MTIME_IS_SET)) {
2482
2520
  gz->mtime = time(0);
2483
2521
  }
2484
2522
 
@@ -2522,13 +2560,14 @@ gzfile_make_footer(struct gzfile *gz)
2522
2560
  }
2523
2561
 
2524
2562
  static void
2525
- gzfile_read_header(struct gzfile *gz)
2563
+ gzfile_read_header(struct gzfile *gz, VALUE outbuf)
2526
2564
  {
2527
2565
  const unsigned char *head;
2528
2566
  long len;
2529
2567
  char flags, *p;
2530
2568
 
2531
- if (!gzfile_read_raw_ensure(gz, 10)) { /* 10 is the size of gzip header */
2569
+ /* 10 is the size of gzip header */
2570
+ if (!gzfile_read_raw_ensure(gz, 10, outbuf)) {
2532
2571
  gzfile_raise(gz, cGzError, "not in gzip format");
2533
2572
  }
2534
2573
 
@@ -2567,33 +2606,31 @@ gzfile_read_header(struct gzfile *gz)
2567
2606
  zstream_discard_input(&gz->z, 10);
2568
2607
 
2569
2608
  if (flags & GZ_FLAG_EXTRA) {
2570
- if (!gzfile_read_raw_ensure(gz, 2)) {
2609
+ if (!gzfile_read_raw_ensure(gz, 2, outbuf)) {
2571
2610
  rb_raise(cGzError, "unexpected end of file");
2572
2611
  }
2573
2612
  len = gzfile_get16((Bytef*)RSTRING_PTR(gz->z.input));
2574
- if (!gzfile_read_raw_ensure(gz, 2 + len)) {
2613
+ if (!gzfile_read_raw_ensure(gz, 2 + len, outbuf)) {
2575
2614
  rb_raise(cGzError, "unexpected end of file");
2576
2615
  }
2577
2616
  zstream_discard_input(&gz->z, 2 + len);
2578
2617
  }
2579
2618
  if (flags & GZ_FLAG_ORIG_NAME) {
2580
- if (!gzfile_read_raw_ensure(gz, 1)) {
2619
+ if (!gzfile_read_raw_ensure(gz, 1, outbuf)) {
2581
2620
  rb_raise(cGzError, "unexpected end of file");
2582
2621
  }
2583
2622
  p = gzfile_read_raw_until_zero(gz, 0);
2584
2623
  len = p - RSTRING_PTR(gz->z.input);
2585
2624
  gz->orig_name = rb_str_new(RSTRING_PTR(gz->z.input), len);
2586
- OBJ_TAINT(gz->orig_name); /* for safe */
2587
2625
  zstream_discard_input(&gz->z, len + 1);
2588
2626
  }
2589
2627
  if (flags & GZ_FLAG_COMMENT) {
2590
- if (!gzfile_read_raw_ensure(gz, 1)) {
2628
+ if (!gzfile_read_raw_ensure(gz, 1, outbuf)) {
2591
2629
  rb_raise(cGzError, "unexpected end of file");
2592
2630
  }
2593
2631
  p = gzfile_read_raw_until_zero(gz, 0);
2594
2632
  len = p - RSTRING_PTR(gz->z.input);
2595
2633
  gz->comment = rb_str_new(RSTRING_PTR(gz->z.input), len);
2596
- OBJ_TAINT(gz->comment); /* for safe */
2597
2634
  zstream_discard_input(&gz->z, len + 1);
2598
2635
  }
2599
2636
 
@@ -2603,13 +2640,14 @@ gzfile_read_header(struct gzfile *gz)
2603
2640
  }
2604
2641
 
2605
2642
  static void
2606
- gzfile_check_footer(struct gzfile *gz)
2643
+ gzfile_check_footer(struct gzfile *gz, VALUE outbuf)
2607
2644
  {
2608
2645
  unsigned long crc, length;
2609
2646
 
2610
2647
  gz->z.flags |= GZFILE_FLAG_FOOTER_FINISHED;
2611
2648
 
2612
- if (!gzfile_read_raw_ensure(gz, 8)) { /* 8 is the size of gzip footer */
2649
+ /* 8 is the size of gzip footer */
2650
+ if (!gzfile_read_raw_ensure(gz, 8, outbuf)) {
2613
2651
  gzfile_raise(gz, cNoFooter, "footer is not found");
2614
2652
  }
2615
2653
 
@@ -2643,12 +2681,12 @@ gzfile_write(struct gzfile *gz, Bytef *str, long len)
2643
2681
  }
2644
2682
 
2645
2683
  static long
2646
- gzfile_read_more(struct gzfile *gz)
2684
+ gzfile_read_more(struct gzfile *gz, VALUE outbuf)
2647
2685
  {
2648
2686
  VALUE str;
2649
2687
 
2650
2688
  while (!ZSTREAM_IS_FINISHED(&gz->z)) {
2651
- str = gzfile_read_raw(gz);
2689
+ str = gzfile_read_raw(gz, outbuf);
2652
2690
  if (NIL_P(str)) {
2653
2691
  if (!ZSTREAM_IS_FINISHED(&gz->z)) {
2654
2692
  rb_raise(cGzError, "unexpected end of file");
@@ -2683,13 +2721,11 @@ gzfile_newstr(struct gzfile *gz, VALUE str)
2683
2721
  {
2684
2722
  if (!gz->enc2) {
2685
2723
  rb_enc_associate(str, gz->enc);
2686
- OBJ_TAINT(str); /* for safe */
2687
2724
  return str;
2688
2725
  }
2689
2726
  if (gz->ec && rb_enc_dummy_p(gz->enc2)) {
2690
2727
  str = rb_econv_str_convert(gz->ec, str, ECONV_PARTIAL_INPUT);
2691
2728
  rb_enc_associate(str, gz->enc);
2692
- OBJ_TAINT(str);
2693
2729
  return str;
2694
2730
  }
2695
2731
  return rb_str_conv_enc_opts(str, gz->enc2, gz->enc,
@@ -2704,11 +2740,11 @@ gzfile_fill(struct gzfile *gz, long len)
2704
2740
  if (len == 0)
2705
2741
  return 0;
2706
2742
  while (!ZSTREAM_IS_FINISHED(&gz->z) && ZSTREAM_BUF_FILLED(&gz->z) < len) {
2707
- gzfile_read_more(gz);
2743
+ gzfile_read_more(gz, Qnil);
2708
2744
  }
2709
2745
  if (GZFILE_IS_FINISHED(gz)) {
2710
2746
  if (!(gz->z.flags & GZFILE_FLAG_FOOTER_FINISHED)) {
2711
- gzfile_check_footer(gz);
2747
+ gzfile_check_footer(gz, Qnil);
2712
2748
  }
2713
2749
  return -1;
2714
2750
  }
@@ -2736,9 +2772,6 @@ gzfile_readpartial(struct gzfile *gz, long len, VALUE outbuf)
2736
2772
  if (len < 0)
2737
2773
  rb_raise(rb_eArgError, "negative length %ld given", len);
2738
2774
 
2739
- if (!NIL_P(outbuf))
2740
- OBJ_TAINT(outbuf);
2741
-
2742
2775
  if (len == 0) {
2743
2776
  if (NIL_P(outbuf))
2744
2777
  return rb_str_new(0, 0);
@@ -2748,11 +2781,11 @@ gzfile_readpartial(struct gzfile *gz, long len, VALUE outbuf)
2748
2781
  }
2749
2782
  }
2750
2783
  while (!ZSTREAM_IS_FINISHED(&gz->z) && ZSTREAM_BUF_FILLED(&gz->z) == 0) {
2751
- gzfile_read_more(gz);
2784
+ gzfile_read_more(gz, outbuf);
2752
2785
  }
2753
2786
  if (GZFILE_IS_FINISHED(gz)) {
2754
2787
  if (!(gz->z.flags & GZFILE_FLAG_FOOTER_FINISHED)) {
2755
- gzfile_check_footer(gz);
2788
+ gzfile_check_footer(gz, outbuf);
2756
2789
  }
2757
2790
  if (!NIL_P(outbuf))
2758
2791
  rb_str_resize(outbuf, 0);
@@ -2765,10 +2798,10 @@ gzfile_readpartial(struct gzfile *gz, long len, VALUE outbuf)
2765
2798
  if (!NIL_P(outbuf)) {
2766
2799
  rb_str_resize(outbuf, RSTRING_LEN(dst));
2767
2800
  memcpy(RSTRING_PTR(outbuf), RSTRING_PTR(dst), RSTRING_LEN(dst));
2768
- RB_GC_GUARD(dst);
2801
+ rb_str_resize(dst, 0);
2802
+ rb_gc_force_recycle(dst);
2769
2803
  dst = outbuf;
2770
2804
  }
2771
- OBJ_TAINT(dst); /* for safe */
2772
2805
  return dst;
2773
2806
  }
2774
2807
 
@@ -2778,11 +2811,11 @@ gzfile_read_all(struct gzfile *gz)
2778
2811
  VALUE dst;
2779
2812
 
2780
2813
  while (!ZSTREAM_IS_FINISHED(&gz->z)) {
2781
- gzfile_read_more(gz);
2814
+ gzfile_read_more(gz, Qnil);
2782
2815
  }
2783
2816
  if (GZFILE_IS_FINISHED(gz)) {
2784
2817
  if (!(gz->z.flags & GZFILE_FLAG_FOOTER_FINISHED)) {
2785
- gzfile_check_footer(gz);
2818
+ gzfile_check_footer(gz, Qnil);
2786
2819
  }
2787
2820
  return rb_str_new(0, 0);
2788
2821
  }
@@ -2790,7 +2823,6 @@ gzfile_read_all(struct gzfile *gz)
2790
2823
  dst = zstream_detach_buffer(&gz->z);
2791
2824
  if (NIL_P(dst)) return dst;
2792
2825
  gzfile_calc_crc(gz, dst);
2793
- OBJ_TAINT(dst);
2794
2826
  return gzfile_newstr(gz, dst);
2795
2827
  }
2796
2828
 
@@ -2802,11 +2834,11 @@ gzfile_getc(struct gzfile *gz)
2802
2834
 
2803
2835
  len = rb_enc_mbmaxlen(gz->enc);
2804
2836
  while (!ZSTREAM_IS_FINISHED(&gz->z) && ZSTREAM_BUF_FILLED(&gz->z) < len) {
2805
- gzfile_read_more(gz);
2837
+ gzfile_read_more(gz, Qnil);
2806
2838
  }
2807
2839
  if (GZFILE_IS_FINISHED(gz)) {
2808
2840
  if (!(gz->z.flags & GZFILE_FLAG_FOOTER_FINISHED)) {
2809
- gzfile_check_footer(gz);
2841
+ gzfile_check_footer(gz, Qnil);
2810
2842
  }
2811
2843
  return Qnil;
2812
2844
  }
@@ -2814,22 +2846,18 @@ gzfile_getc(struct gzfile *gz)
2814
2846
  if (gz->ec && rb_enc_dummy_p(gz->enc2)) {
2815
2847
  const unsigned char *ss, *sp, *se;
2816
2848
  unsigned char *ds, *dp, *de;
2849
+ VALUE cbuf = rb_enc_str_new(0, GZFILE_CBUF_CAPA, gz->enc);
2817
2850
 
2818
- if (!gz->cbuf) {
2819
- gz->cbuf = ALLOC_N(char, GZFILE_CBUF_CAPA);
2820
- }
2821
2851
  ss = sp = (const unsigned char*)RSTRING_PTR(gz->z.buf);
2822
2852
  se = sp + ZSTREAM_BUF_FILLED(&gz->z);
2823
- ds = dp = (unsigned char *)gz->cbuf;
2853
+ ds = dp = (unsigned char *)RSTRING_PTR(cbuf);
2824
2854
  de = (unsigned char *)ds + GZFILE_CBUF_CAPA;
2825
2855
  (void)rb_econv_convert(gz->ec, &sp, se, &dp, de, ECONV_PARTIAL_INPUT|ECONV_AFTER_OUTPUT);
2826
2856
  rb_econv_check_error(gz->ec);
2827
2857
  dst = zstream_shift_buffer(&gz->z, sp - ss);
2828
2858
  gzfile_calc_crc(gz, dst);
2829
- dst = rb_str_new(gz->cbuf, dp - ds);
2830
- rb_enc_associate(dst, gz->enc);
2831
- OBJ_TAINT(dst);
2832
- return dst;
2859
+ rb_str_resize(cbuf, dp - ds);
2860
+ return cbuf;
2833
2861
  }
2834
2862
  else {
2835
2863
  buf = gz->z.buf;
@@ -2876,7 +2904,7 @@ gzfile_writer_end(struct gzfile *gz)
2876
2904
  if (ZSTREAM_IS_CLOSING(&gz->z)) return;
2877
2905
  gz->z.flags |= ZSTREAM_FLAG_CLOSING;
2878
2906
 
2879
- rb_ensure(gzfile_writer_end_run, (VALUE)gz, zstream_end, (VALUE)&gz->z);
2907
+ rb_ensure(gzfile_writer_end_run, (VALUE)gz, zstream_ensure_end, (VALUE)&gz->z);
2880
2908
  }
2881
2909
 
2882
2910
  static VALUE
@@ -2886,7 +2914,7 @@ gzfile_reader_end_run(VALUE arg)
2886
2914
 
2887
2915
  if (GZFILE_IS_FINISHED(gz)
2888
2916
  && !(gz->z.flags & GZFILE_FLAG_FOOTER_FINISHED)) {
2889
- gzfile_check_footer(gz);
2917
+ gzfile_check_footer(gz, Qnil);
2890
2918
  }
2891
2919
 
2892
2920
  return Qnil;
@@ -2898,7 +2926,7 @@ gzfile_reader_end(struct gzfile *gz)
2898
2926
  if (ZSTREAM_IS_CLOSING(&gz->z)) return;
2899
2927
  gz->z.flags |= ZSTREAM_FLAG_CLOSING;
2900
2928
 
2901
- rb_ensure(gzfile_reader_end_run, (VALUE)gz, zstream_end, (VALUE)&gz->z);
2929
+ rb_ensure(gzfile_reader_end_run, (VALUE)gz, zstream_ensure_end, (VALUE)&gz->z);
2902
2930
  }
2903
2931
 
2904
2932
  static void
@@ -2923,12 +2951,11 @@ gzfile_reader_get_unused(struct gzfile *gz)
2923
2951
  if (!ZSTREAM_IS_READY(&gz->z)) return Qnil;
2924
2952
  if (!GZFILE_IS_FINISHED(gz)) return Qnil;
2925
2953
  if (!(gz->z.flags & GZFILE_FLAG_FOOTER_FINISHED)) {
2926
- gzfile_check_footer(gz);
2954
+ gzfile_check_footer(gz, Qnil);
2927
2955
  }
2928
2956
  if (NIL_P(gz->z.input)) return Qnil;
2929
2957
 
2930
2958
  str = rb_str_resurrect(gz->z.input);
2931
- OBJ_TAINT(str); /* for safe */
2932
2959
  return str;
2933
2960
  }
2934
2961
 
@@ -2995,7 +3022,7 @@ static VALUE
2995
3022
  new_wrap(VALUE tmp)
2996
3023
  {
2997
3024
  new_wrap_arg_t *arg = (new_wrap_arg_t *)tmp;
2998
- return rb_class_new_instance(arg->argc, arg->argv, arg->klass);
3025
+ return rb_class_new_instance_kw(arg->argc, arg->argv, arg->klass, RB_PASS_CALLED_KEYWORDS);
2999
3026
  }
3000
3027
 
3001
3028
  static VALUE
@@ -3028,7 +3055,7 @@ gzfile_wrap(int argc, VALUE *argv, VALUE klass, int close_io_on_error)
3028
3055
  }
3029
3056
  }
3030
3057
  else {
3031
- obj = rb_class_new_instance(argc, argv, klass);
3058
+ obj = rb_class_new_instance_kw(argc, argv, klass, RB_PASS_CALLED_KEYWORDS);
3032
3059
  }
3033
3060
 
3034
3061
  if (rb_block_given_p()) {
@@ -3145,7 +3172,6 @@ rb_gzfile_orig_name(VALUE obj)
3145
3172
  if (!NIL_P(str)) {
3146
3173
  str = rb_str_dup(str);
3147
3174
  }
3148
- OBJ_TAINT(str); /* for safe */
3149
3175
  return str;
3150
3176
  }
3151
3177
 
@@ -3162,7 +3188,6 @@ rb_gzfile_comment(VALUE obj)
3162
3188
  if (!NIL_P(str)) {
3163
3189
  str = rb_str_dup(str);
3164
3190
  }
3165
- OBJ_TAINT(str); /* for safe */
3166
3191
  return str;
3167
3192
  }
3168
3193
 
@@ -3221,6 +3246,7 @@ rb_gzfile_set_mtime(VALUE obj, VALUE mtime)
3221
3246
 
3222
3247
  val = rb_Integer(mtime);
3223
3248
  gz->mtime = NUM2UINT(val);
3249
+ gz->z.flags |= GZFILE_FLAG_MTIME_IS_SET;
3224
3250
 
3225
3251
  return mtime;
3226
3252
  }
@@ -3731,7 +3757,7 @@ rb_gzreader_initialize(int argc, VALUE *argv, VALUE obj)
3731
3757
  }
3732
3758
  gz->io = io;
3733
3759
  ZSTREAM_READY(&gz->z);
3734
- gzfile_read_header(gz);
3760
+ gzfile_read_header(gz, Qnil);
3735
3761
  rb_gzfile_ecopts(gz, opt);
3736
3762
 
3737
3763
  if (rb_respond_to(io, id_path)) {
@@ -3981,7 +4007,7 @@ gzreader_skip_linebreaks(struct gzfile *gz)
3981
4007
 
3982
4008
  while (ZSTREAM_BUF_FILLED(&gz->z) == 0) {
3983
4009
  if (GZFILE_IS_FINISHED(gz)) return;
3984
- gzfile_read_more(gz);
4010
+ gzfile_read_more(gz, Qnil);
3985
4011
  }
3986
4012
  n = 0;
3987
4013
  p = RSTRING_PTR(gz->z.buf);
@@ -3992,7 +4018,7 @@ gzreader_skip_linebreaks(struct gzfile *gz)
3992
4018
  gzfile_calc_crc(gz, str);
3993
4019
  while (ZSTREAM_BUF_FILLED(&gz->z) == 0) {
3994
4020
  if (GZFILE_IS_FINISHED(gz)) return;
3995
- gzfile_read_more(gz);
4021
+ gzfile_read_more(gz, Qnil);
3996
4022
  }
3997
4023
  n = 0;
3998
4024
  p = RSTRING_PTR(gz->z.buf);
@@ -4114,7 +4140,7 @@ gzreader_gets(int argc, VALUE *argv, VALUE obj)
4114
4140
  if (ZSTREAM_BUF_FILLED(&gz->z) > 0) gz->lineno++;
4115
4141
  return gzfile_read(gz, rslen);
4116
4142
  }
4117
- gzfile_read_more(gz);
4143
+ gzfile_read_more(gz, Qnil);
4118
4144
  }
4119
4145
 
4120
4146
  p = RSTRING_PTR(gz->z.buf);
@@ -4123,7 +4149,7 @@ gzreader_gets(int argc, VALUE *argv, VALUE obj)
4123
4149
  long filled;
4124
4150
  if (n > ZSTREAM_BUF_FILLED(&gz->z)) {
4125
4151
  if (ZSTREAM_IS_FINISHED(&gz->z)) break;
4126
- gzfile_read_more(gz);
4152
+ gzfile_read_more(gz, Qnil);
4127
4153
  p = RSTRING_PTR(gz->z.buf) + n - rslen;
4128
4154
  }
4129
4155
  if (!rspara) rscheck(rsptr, rslen, rs);
@@ -4251,13 +4277,19 @@ rb_gzreader_external_encoding(VALUE self)
4251
4277
  }
4252
4278
 
4253
4279
  static VALUE
4254
- zlib_gzip_ensure(VALUE arg)
4280
+ zlib_gzip_end_rescue(VALUE arg)
4255
4281
  {
4256
4282
  struct gzfile *gz = (struct gzfile *)arg;
4257
- rb_rescue((VALUE(*)())gz->end, arg, NULL, Qnil);
4283
+ gz->end(gz);
4258
4284
  return Qnil;
4259
4285
  }
4260
4286
 
4287
+ static VALUE
4288
+ zlib_gzip_ensure(VALUE arg)
4289
+ {
4290
+ return rb_rescue(zlib_gzip_end_rescue, arg, NULL, Qnil);
4291
+ }
4292
+
4261
4293
  static void
4262
4294
  zlib_gzip_end(struct gzfile *gz)
4263
4295
  {
@@ -4403,7 +4435,7 @@ zlib_gunzip_run(VALUE arg)
4403
4435
  struct gzfile *gz = (struct gzfile *)arg;
4404
4436
  VALUE dst;
4405
4437
 
4406
- gzfile_read_header(gz);
4438
+ gzfile_read_header(gz, Qnil);
4407
4439
  dst = zstream_detach_buffer(&gz->z);
4408
4440
  gzfile_calc_crc(gz, dst);
4409
4441
  if (!ZSTREAM_IS_FINISHED(&gz->z)) {
@@ -4412,7 +4444,7 @@ zlib_gunzip_run(VALUE arg)
4412
4444
  if (NIL_P(gz->z.input)) {
4413
4445
  rb_raise(cNoFooter, "footer is not found");
4414
4446
  }
4415
- gzfile_check_footer(gz);
4447
+ gzfile_check_footer(gz, Qnil);
4416
4448
  return dst;
4417
4449
  }
4418
4450
 
@@ -4421,6 +4453,7 @@ zlib_gunzip_run(VALUE arg)
4421
4453
  void
4422
4454
  Init_zlib(void)
4423
4455
  {
4456
+ #undef rb_intern
4424
4457
  VALUE mZlib, cZStream, cDeflate, cInflate;
4425
4458
  #if GZIP_SUPPORT
4426
4459
  VALUE cGzipFile, cGzipWriter, cGzipReader;
@@ -4844,5 +4877,3 @@ Init_zlib(void)
4844
4877
  * Raised when the data length recorded in the gzip file footer is not equivalent
4845
4878
  * to the length of the actual uncompressed data.
4846
4879
  */
4847
-
4848
-
@@ -1,9 +1,19 @@
1
1
  # coding: utf-8
2
2
  # frozen_string_literal: true
3
+
4
+ source_version = ["", "ext/zlib/"].find do |dir|
5
+ begin
6
+ break File.open(File.join(__dir__, "#{dir}zlib.c")) {|f|
7
+ f.gets("\n#define RUBY_ZLIB_VERSION ")
8
+ f.gets[/\s*"(.+)"/, 1]
9
+ }
10
+ rescue Errno::ENOENT
11
+ end
12
+ end
13
+
3
14
  Gem::Specification.new do |spec|
4
15
  spec.name = "zlib"
5
- spec.version = "1.0.0"
6
- spec.date = '2017-12-11'
16
+ spec.version = source_version
7
17
  spec.authors = ["Yukihiro Matsumoto", "UENO Katsuhiro"]
8
18
  spec.email = ["matz@ruby-lang.org", nil]
9
19
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zlib
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yukihiro Matsumoto
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2017-12-11 00:00:00.000000000 Z
12
+ date: 2019-11-30 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -92,8 +92,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
92
92
  - !ruby/object:Gem::Version
93
93
  version: '0'
94
94
  requirements: []
95
- rubyforge_project:
96
- rubygems_version: 2.5.2.1
95
+ rubygems_version: 3.0.3
97
96
  signing_key:
98
97
  specification_version: 4
99
98
  summary: Ruby interface for the zlib compression/decompression library