zlib 2.1.1 → 3.1.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 +4 -4
- data/ext/zlib/extconf.rb +11 -4
- data/ext/zlib/zlib.c +101 -54
- data/zlib.gemspec +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5a142899fbd58686f35175f42086f71f273cc7d286d01a9bb78ff8bd11e408cb
|
4
|
+
data.tar.gz: f734de045270183857df81bf0996ab49d59eb5ff5999ca9d334d688ba50a06b8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b7fa3e4abea3e1ca2ee1f02ff5ebf57cdc1fb3ef43a8220a2fe2cfadae9e63ce95790092251bd790d90dd6a38e4645449ec67ac0e737b7b8c0b6870c797e5017
|
7
|
+
data.tar.gz: 15bb4093a7645e09a3dddc209dab70ad9ea550086439867c230fb14eeeb64113518bd7c4c23f1ee64140fc6e82bc6c548d35f65dc9668d314b4659536541a99c
|
data/ext/zlib/extconf.rb
CHANGED
@@ -11,10 +11,9 @@ require 'rbconfig'
|
|
11
11
|
dir_config 'zlib'
|
12
12
|
|
13
13
|
libs = $libs
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
else
|
14
|
+
have_zlib = %w'z libz zlib1 zlib zdll zlibwapi'.any? {|z| have_library(z, 'deflateReset(NULL)', 'zlib.h')}
|
15
|
+
|
16
|
+
unless have_zlib
|
18
17
|
$libs = libs
|
19
18
|
unless File.directory?(zsrc = "#{$srcdir}/zlib")
|
20
19
|
dirs = Dir.open($srcdir) {|z| z.grep(/\Azlib-\d+[.\d]*\z/) {|x|"#{$srcdir}/#{x}"}}
|
@@ -121,10 +120,18 @@ if have_zlib
|
|
121
120
|
$defs << "-DHAVE_CRC32_COMBINE"
|
122
121
|
$defs << "-DHAVE_ADLER32_COMBINE"
|
123
122
|
$defs << "-DHAVE_TYPE_Z_CRC_T"
|
123
|
+
$defs << "-DHAVE_CRC32_Z"
|
124
|
+
$defs << "-DHAVE_ADLER32_Z"
|
125
|
+
$defs << "-DHAVE_ZLIB_SIZE_T_FUNCS"
|
124
126
|
else
|
125
127
|
have_func('crc32_combine', 'zlib.h')
|
126
128
|
have_func('adler32_combine', 'zlib.h')
|
127
129
|
have_type('z_crc_t', 'zlib.h')
|
130
|
+
if (have_type('z_size_t', 'zlib.h') &&
|
131
|
+
have_func('crc32_z', 'zlib.h') &&
|
132
|
+
have_func('adler32_z', 'zlib.h'))
|
133
|
+
$defs << "-DHAVE_ZLIB_SIZE_T_FUNCS"
|
134
|
+
end
|
128
135
|
end
|
129
136
|
|
130
137
|
create_makefile('zlib') {|conf|
|
data/ext/zlib/zlib.c
CHANGED
@@ -25,7 +25,7 @@
|
|
25
25
|
# define VALGRIND_MAKE_MEM_UNDEFINED(p, n) 0
|
26
26
|
#endif
|
27
27
|
|
28
|
-
#define RUBY_ZLIB_VERSION "
|
28
|
+
#define RUBY_ZLIB_VERSION "3.1.0"
|
29
29
|
|
30
30
|
#ifndef RB_PASS_CALLED_KEYWORDS
|
31
31
|
# define rb_class_new_instance_kw(argc, argv, klass, kw_splat) rb_class_new_instance(argc, argv, klass)
|
@@ -44,6 +44,14 @@
|
|
44
44
|
#endif
|
45
45
|
#endif
|
46
46
|
|
47
|
+
#if defined(HAVE_ZLIB_SIZE_T_FUNCS)
|
48
|
+
typedef uLong (*checksum_func)(uLong, const Bytef*, z_size_t);
|
49
|
+
# define crc32 crc32_z
|
50
|
+
# define adler32 adler32_z
|
51
|
+
#else
|
52
|
+
typedef uLong (*checksum_func)(uLong, const Bytef*, uInt);
|
53
|
+
#endif
|
54
|
+
|
47
55
|
#if SIZEOF_LONG > SIZEOF_INT
|
48
56
|
static inline uInt
|
49
57
|
max_uint(long n)
|
@@ -65,7 +73,7 @@ static ID id_dictionaries, id_read, id_buffer;
|
|
65
73
|
|
66
74
|
static NORETURN(void raise_zlib_error(int, const char*));
|
67
75
|
static VALUE rb_zlib_version(VALUE);
|
68
|
-
static VALUE do_checksum(int, VALUE*,
|
76
|
+
static VALUE do_checksum(int, VALUE*, checksum_func);
|
69
77
|
static VALUE rb_zlib_adler32(int, VALUE*, VALUE);
|
70
78
|
static VALUE rb_zlib_crc32(int, VALUE*, VALUE);
|
71
79
|
static VALUE rb_zlib_crc_table(VALUE);
|
@@ -288,6 +296,7 @@ static VALUE rb_gzreader_readlines(int, VALUE*, VALUE);
|
|
288
296
|
* - Zlib::MemError
|
289
297
|
* - Zlib::BufError
|
290
298
|
* - Zlib::VersionError
|
299
|
+
* - Zlib::InProgressError
|
291
300
|
*
|
292
301
|
* (if you have GZIP_SUPPORT)
|
293
302
|
* - Zlib::GzipReader
|
@@ -304,7 +313,7 @@ void Init_zlib(void);
|
|
304
313
|
/*--------- Exceptions --------*/
|
305
314
|
|
306
315
|
static VALUE cZError, cStreamEnd, cNeedDict;
|
307
|
-
static VALUE cStreamError, cDataError, cMemError, cBufError, cVersionError;
|
316
|
+
static VALUE cStreamError, cDataError, cMemError, cBufError, cVersionError, cInProgressError;
|
308
317
|
|
309
318
|
static void
|
310
319
|
raise_zlib_error(int err, const char *msg)
|
@@ -373,26 +382,32 @@ rb_zlib_version(VALUE klass)
|
|
373
382
|
return rb_str_new2(zlibVersion());
|
374
383
|
}
|
375
384
|
|
376
|
-
#if SIZEOF_LONG >
|
385
|
+
#if SIZEOF_LONG * CHAR_BIT > 32
|
386
|
+
# define mask32(x) ((x) & 0xffffffff)
|
387
|
+
#else
|
388
|
+
# define mask32(x) (x)
|
389
|
+
#endif
|
390
|
+
|
391
|
+
#if SIZEOF_LONG > SIZEOF_INT && !defined(HAVE_ZLIB_SIZE_T_FUNCS)
|
377
392
|
static uLong
|
378
393
|
checksum_long(uLong (*func)(uLong, const Bytef*, uInt), uLong sum, const Bytef *ptr, long len)
|
379
394
|
{
|
380
395
|
if (len > UINT_MAX) {
|
381
396
|
do {
|
382
|
-
sum = func(sum, ptr, UINT_MAX);
|
397
|
+
sum = func(mask32(sum), ptr, UINT_MAX);
|
383
398
|
ptr += UINT_MAX;
|
384
399
|
len -= UINT_MAX;
|
385
400
|
} while (len >= UINT_MAX);
|
386
401
|
}
|
387
|
-
if (len > 0) sum = func(sum, ptr, (uInt)len);
|
402
|
+
if (len > 0) sum = func(mask32(sum), ptr, (uInt)len);
|
388
403
|
return sum;
|
389
404
|
}
|
390
405
|
#else
|
391
|
-
#define checksum_long(func, sum, ptr, len) (func)((sum), (ptr), (len))
|
406
|
+
#define checksum_long(func, sum, ptr, len) (func)(mask32(sum), (ptr), (len))
|
392
407
|
#endif
|
393
408
|
|
394
409
|
static VALUE
|
395
|
-
do_checksum(int argc, VALUE *argv,
|
410
|
+
do_checksum(int argc, VALUE *argv, checksum_func func)
|
396
411
|
{
|
397
412
|
VALUE str, vsum;
|
398
413
|
unsigned long sum;
|
@@ -410,7 +425,7 @@ do_checksum(int argc, VALUE *argv, uLong (*func)(uLong, const Bytef*, uInt))
|
|
410
425
|
}
|
411
426
|
|
412
427
|
if (NIL_P(str)) {
|
413
|
-
sum = func(sum, Z_NULL, 0);
|
428
|
+
sum = func(mask32(sum), Z_NULL, 0);
|
414
429
|
}
|
415
430
|
else if (rb_obj_is_kind_of(str, rb_cIO)) {
|
416
431
|
VALUE buf;
|
@@ -460,7 +475,7 @@ rb_zlib_adler32(int argc, VALUE *argv, VALUE klass)
|
|
460
475
|
*
|
461
476
|
* call-seq: Zlib.adler32_combine(adler1, adler2, len2)
|
462
477
|
*
|
463
|
-
* Combine two Adler-32 check values in to one. +
|
478
|
+
* Combine two Adler-32 check values in to one. +adler1+ is the first Adler-32
|
464
479
|
* value, +adler2+ is the second Adler-32 value. +len2+ is the length of the
|
465
480
|
* string used to generate +adler2+.
|
466
481
|
*
|
@@ -557,14 +572,15 @@ struct zstream {
|
|
557
572
|
} *func;
|
558
573
|
};
|
559
574
|
|
560
|
-
#define ZSTREAM_FLAG_READY
|
561
|
-
#define ZSTREAM_FLAG_IN_STREAM
|
562
|
-
#define ZSTREAM_FLAG_FINISHED
|
563
|
-
#define ZSTREAM_FLAG_CLOSING
|
564
|
-
#define ZSTREAM_FLAG_GZFILE
|
575
|
+
#define ZSTREAM_FLAG_READY (1 << 0)
|
576
|
+
#define ZSTREAM_FLAG_IN_STREAM (1 << 1)
|
577
|
+
#define ZSTREAM_FLAG_FINISHED (1 << 2)
|
578
|
+
#define ZSTREAM_FLAG_CLOSING (1 << 3)
|
579
|
+
#define ZSTREAM_FLAG_GZFILE (1 << 4) /* disallows yield from expand_buffer for
|
565
580
|
gzip*/
|
566
|
-
#define ZSTREAM_REUSE_BUFFER
|
567
|
-
#define
|
581
|
+
#define ZSTREAM_REUSE_BUFFER (1 << 5)
|
582
|
+
#define ZSTREAM_IN_PROGRESS (1 << 6)
|
583
|
+
#define ZSTREAM_FLAG_UNUSED (1 << 7)
|
568
584
|
|
569
585
|
#define ZSTREAM_READY(z) ((z)->flags |= ZSTREAM_FLAG_READY)
|
570
586
|
#define ZSTREAM_IS_READY(z) ((z)->flags & ZSTREAM_FLAG_READY)
|
@@ -593,7 +609,9 @@ static const struct zstream_funcs inflate_funcs = {
|
|
593
609
|
};
|
594
610
|
|
595
611
|
struct zstream_run_args {
|
596
|
-
struct zstream * z;
|
612
|
+
struct zstream *const z;
|
613
|
+
Bytef *src;
|
614
|
+
long len;
|
597
615
|
int flush; /* stream flush value for inflate() or deflate() */
|
598
616
|
int interrupt; /* stop processing the stream and return to ruby */
|
599
617
|
int jump_state; /* for buffer expansion block break or exception */
|
@@ -894,7 +912,6 @@ zstream_discard_input(struct zstream *z, long len)
|
|
894
912
|
}
|
895
913
|
rb_str_resize(z->input, newlen);
|
896
914
|
if (newlen == 0) {
|
897
|
-
rb_gc_force_recycle(z->input);
|
898
915
|
z->input = Qnil;
|
899
916
|
}
|
900
917
|
else {
|
@@ -906,7 +923,7 @@ zstream_discard_input(struct zstream *z, long len)
|
|
906
923
|
z->input = Qnil;
|
907
924
|
}
|
908
925
|
else {
|
909
|
-
z->input =
|
926
|
+
z->input = rb_str_subseq(z->input, len,
|
910
927
|
RSTRING_LEN(z->input) - len);
|
911
928
|
}
|
912
929
|
}
|
@@ -1059,19 +1076,18 @@ zstream_unblock_func(void *ptr)
|
|
1059
1076
|
args->interrupt = 1;
|
1060
1077
|
}
|
1061
1078
|
|
1062
|
-
static
|
1063
|
-
|
1079
|
+
static VALUE
|
1080
|
+
zstream_run_try(VALUE value_arg)
|
1064
1081
|
{
|
1065
|
-
struct zstream_run_args args;
|
1082
|
+
struct zstream_run_args *args = (struct zstream_run_args *)value_arg;
|
1083
|
+
struct zstream *z = args->z;
|
1084
|
+
Bytef *src = args->src;
|
1085
|
+
long len = args->len;
|
1086
|
+
int flush = args->flush;
|
1087
|
+
|
1066
1088
|
int err;
|
1067
1089
|
VALUE old_input = Qnil;
|
1068
1090
|
|
1069
|
-
args.z = z;
|
1070
|
-
args.flush = flush;
|
1071
|
-
args.interrupt = 0;
|
1072
|
-
args.jump_state = 0;
|
1073
|
-
args.stream_output = !ZSTREAM_IS_GZFILE(z) && rb_block_given_p();
|
1074
|
-
|
1075
1091
|
if (NIL_P(z->input) && len == 0) {
|
1076
1092
|
z->stream.next_in = (Bytef*)"";
|
1077
1093
|
z->stream.avail_in = 0;
|
@@ -1093,17 +1109,17 @@ zstream_run0(struct zstream *z, Bytef *src, long len, int flush)
|
|
1093
1109
|
|
1094
1110
|
loop:
|
1095
1111
|
#ifndef RB_NOGVL_UBF_ASYNC_SAFE
|
1096
|
-
err = (int)(VALUE)rb_thread_call_without_gvl(zstream_run_func, (void *)
|
1097
|
-
zstream_unblock_func, (void *)
|
1112
|
+
err = (int)(VALUE)rb_thread_call_without_gvl(zstream_run_func, (void *)args,
|
1113
|
+
zstream_unblock_func, (void *)args);
|
1098
1114
|
#else
|
1099
|
-
err = (int)(VALUE)rb_nogvl(zstream_run_func, (void *)
|
1100
|
-
zstream_unblock_func, (void *)
|
1115
|
+
err = (int)(VALUE)rb_nogvl(zstream_run_func, (void *)args,
|
1116
|
+
zstream_unblock_func, (void *)args,
|
1101
1117
|
RB_NOGVL_UBF_ASYNC_SAFE);
|
1102
1118
|
#endif
|
1103
1119
|
|
1104
1120
|
/* retry if no exception is thrown */
|
1105
|
-
if (err == Z_OK && args
|
1106
|
-
args
|
1121
|
+
if (err == Z_OK && args->interrupt) {
|
1122
|
+
args->interrupt = 0;
|
1107
1123
|
goto loop;
|
1108
1124
|
}
|
1109
1125
|
|
@@ -1137,37 +1153,54 @@ loop:
|
|
1137
1153
|
}
|
1138
1154
|
if (!NIL_P(old_input)) {
|
1139
1155
|
rb_str_resize(old_input, 0);
|
1140
|
-
rb_gc_force_recycle(old_input);
|
1141
1156
|
}
|
1142
1157
|
|
1143
|
-
if (args
|
1144
|
-
rb_jump_tag(args
|
1158
|
+
if (args->jump_state)
|
1159
|
+
rb_jump_tag(args->jump_state);
|
1160
|
+
|
1161
|
+
return Qnil;
|
1145
1162
|
}
|
1146
1163
|
|
1147
|
-
|
1148
|
-
|
1149
|
-
|
1150
|
-
|
1151
|
-
|
1152
|
-
|
1164
|
+
static VALUE
|
1165
|
+
zstream_run_ensure(VALUE value_arg)
|
1166
|
+
{
|
1167
|
+
struct zstream_run_args *args = (struct zstream_run_args *)value_arg;
|
1168
|
+
|
1169
|
+
/* Remove ZSTREAM_IN_PROGRESS flag to signal that this zstream is not in use. */
|
1170
|
+
args->z->flags &= ~ZSTREAM_IN_PROGRESS;
|
1171
|
+
|
1172
|
+
return Qnil;
|
1173
|
+
}
|
1153
1174
|
|
1154
1175
|
static VALUE
|
1155
1176
|
zstream_run_synchronized(VALUE value_arg)
|
1156
1177
|
{
|
1157
|
-
struct
|
1158
|
-
|
1178
|
+
struct zstream_run_args *args = (struct zstream_run_args *)value_arg;
|
1179
|
+
|
1180
|
+
/* Cannot start zstream while it is in progress. */
|
1181
|
+
if (args->z->flags & ZSTREAM_IN_PROGRESS) {
|
1182
|
+
rb_raise(cInProgressError, "zlib stream is in progress");
|
1183
|
+
}
|
1184
|
+
args->z->flags |= ZSTREAM_IN_PROGRESS;
|
1185
|
+
|
1186
|
+
rb_ensure(zstream_run_try, value_arg, zstream_run_ensure, value_arg);
|
1187
|
+
|
1159
1188
|
return Qnil;
|
1160
1189
|
}
|
1161
1190
|
|
1162
1191
|
static void
|
1163
1192
|
zstream_run(struct zstream *z, Bytef *src, long len, int flush)
|
1164
1193
|
{
|
1165
|
-
struct
|
1166
|
-
|
1167
|
-
|
1168
|
-
|
1169
|
-
|
1170
|
-
|
1194
|
+
struct zstream_run_args args = {
|
1195
|
+
.z = z,
|
1196
|
+
.src = src,
|
1197
|
+
.len = len,
|
1198
|
+
.flush = flush,
|
1199
|
+
.interrupt = 0,
|
1200
|
+
.jump_state = 0,
|
1201
|
+
.stream_output = !ZSTREAM_IS_GZFILE(z) && rb_block_given_p(),
|
1202
|
+
};
|
1203
|
+
rb_mutex_synchronize(z->mutex, zstream_run_synchronized, (VALUE)&args);
|
1171
1204
|
}
|
1172
1205
|
|
1173
1206
|
static VALUE
|
@@ -2906,8 +2939,6 @@ gzfile_readpartial(struct gzfile *gz, long len, VALUE outbuf)
|
|
2906
2939
|
if (!NIL_P(outbuf)) {
|
2907
2940
|
rb_str_resize(outbuf, RSTRING_LEN(dst));
|
2908
2941
|
memcpy(RSTRING_PTR(outbuf), RSTRING_PTR(dst), RSTRING_LEN(dst));
|
2909
|
-
rb_str_resize(dst, 0);
|
2910
|
-
rb_gc_force_recycle(dst);
|
2911
2942
|
dst = outbuf;
|
2912
2943
|
}
|
2913
2944
|
return dst;
|
@@ -4619,6 +4650,7 @@ Init_zlib(void)
|
|
4619
4650
|
cMemError = rb_define_class_under(mZlib, "MemError", cZError);
|
4620
4651
|
cBufError = rb_define_class_under(mZlib, "BufError", cZError);
|
4621
4652
|
cVersionError = rb_define_class_under(mZlib, "VersionError", cZError);
|
4653
|
+
cInProgressError = rb_define_class_under(mZlib, "InProgressError", cZError);
|
4622
4654
|
|
4623
4655
|
rb_define_module_function(mZlib, "zlib_version", rb_zlib_version, 0);
|
4624
4656
|
rb_define_module_function(mZlib, "adler32", rb_zlib_adler32, -1);
|
@@ -4926,6 +4958,7 @@ Init_zlib(void)
|
|
4926
4958
|
* - Zlib::MemError
|
4927
4959
|
* - Zlib::BufError
|
4928
4960
|
* - Zlib::VersionError
|
4961
|
+
* - Zlib::InProgressError
|
4929
4962
|
*
|
4930
4963
|
*/
|
4931
4964
|
|
@@ -5000,6 +5033,20 @@ Init_zlib(void)
|
|
5000
5033
|
*
|
5001
5034
|
*/
|
5002
5035
|
|
5036
|
+
/*
|
5037
|
+
* Document-class: Zlib::InProgressError
|
5038
|
+
*
|
5039
|
+
* Subclass of Zlib::Error. This error is raised when the zlib
|
5040
|
+
* stream is currently in progress.
|
5041
|
+
*
|
5042
|
+
* For example:
|
5043
|
+
*
|
5044
|
+
* inflater = Zlib::Inflate.new
|
5045
|
+
* inflater.inflate(compressed) do
|
5046
|
+
* inflater.inflate(compressed) # Raises Zlib::InProgressError
|
5047
|
+
* end
|
5048
|
+
*/
|
5049
|
+
|
5003
5050
|
/*
|
5004
5051
|
* Document-class: Zlib::GzipFile::Error
|
5005
5052
|
*
|
data/zlib.gemspec
CHANGED
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:
|
4
|
+
version: 3.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:
|
12
|
+
date: 2023-11-07 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: Ruby interface for the zlib compression/decompression library
|
15
15
|
email:
|
@@ -38,14 +38,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
38
38
|
requirements:
|
39
39
|
- - ">="
|
40
40
|
- !ruby/object:Gem::Version
|
41
|
-
version: 2.
|
41
|
+
version: 2.5.0
|
42
42
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
43
43
|
requirements:
|
44
44
|
- - ">="
|
45
45
|
- !ruby/object:Gem::Version
|
46
46
|
version: '0'
|
47
47
|
requirements: []
|
48
|
-
rubygems_version: 3.
|
48
|
+
rubygems_version: 3.5.0.dev
|
49
49
|
signing_key:
|
50
50
|
specification_version: 4
|
51
51
|
summary: Ruby interface for the zlib compression/decompression library
|