diff options
author | Todd Rinaldo <toddr@cpan.org> | 2020-09-15 09:37:28 -0500 |
---|---|---|
committer | ℕicolas ℝ <nicolas@atoomic.org> | 2020-09-15 10:14:31 -0600 |
commit | 6fec3df196aaacdde5c2dce1817cd0bf08dd949c (patch) | |
tree | baff0cc22e2dac00c495389712211d6f5ea39580 | |
parent | 51638bdfa9deb059bb769a031ead709f191a3065 (diff) | |
download | perl-6fec3df196aaacdde5c2dce1817cd0bf08dd949c.tar.gz |
Update Compress-Raw-Zlib to CPAN version 2.096
[DELTA]
2.096 31 July 2020
* No changes
2.095 19 July 2020
* No changes
2.094 13 July 2020
* Issue with Append mode & SvOOK
https://github.com/pmqs/Compress-Raw-Zlib/issues/3
80ee0524012f46c5984c2d57649af0b07f82c750
-rwxr-xr-x | Porting/Maintainers.pl | 2 | ||||
-rw-r--r-- | cpan/Compress-Raw-Zlib/Zlib.xs | 351 | ||||
-rw-r--r-- | cpan/Compress-Raw-Zlib/lib/Compress/Raw/Zlib.pm | 6 | ||||
-rw-r--r-- | cpan/Compress-Raw-Zlib/t/02zlib.t | 526 |
4 files changed, 493 insertions, 392 deletions
diff --git a/Porting/Maintainers.pl b/Porting/Maintainers.pl index 95b6da34ed..94f3653273 100755 --- a/Porting/Maintainers.pl +++ b/Porting/Maintainers.pl @@ -211,7 +211,7 @@ use File::Glob qw(:case); }, 'Compress::Raw::Zlib' => { - 'DISTRIBUTION' => 'PMQS/Compress-Raw-Zlib-2.093.tar.gz', + 'DISTRIBUTION' => 'PMQS/Compress-Raw-Zlib-2.096.tar.gz', 'FILES' => q[cpan/Compress-Raw-Zlib], 'EXCLUDED' => [ qr{^examples/}, diff --git a/cpan/Compress-Raw-Zlib/Zlib.xs b/cpan/Compress-Raw-Zlib/Zlib.xs index 496b876791..085078de65 100644 --- a/cpan/Compress-Raw-Zlib/Zlib.xs +++ b/cpan/Compress-Raw-Zlib/Zlib.xs @@ -9,9 +9,9 @@ * */ -/* Parts of this code are based on the files gzio.c and gzappend.c from +/* Parts of this code are based on the files gzio.c and gzappend.c from * the standard zlib source distribution. Below are the copyright statements - * from each. + * from each. */ /* gzio.c -- IO on .gz files @@ -31,7 +31,7 @@ #include "perl.h" #include "XSUB.h" -#include "zlib.h" +#include "zlib.h" /* zlib prior to 1.06 doesn't know about z_off_t */ #ifndef z_off_t @@ -39,7 +39,7 @@ #endif #if ! defined(ZLIB_VERNUM) || ZLIB_VERNUM < 0x1200 -# define NEED_DUMMY_BYTE_AT_END +# define NEED_DUMMY_BYTE_AT_END #endif #if defined(ZLIB_VERNUM) && ZLIB_VERNUM >= 0x1210 @@ -64,7 +64,7 @@ #endif #if defined(ZLIB_VERNUM) && ZLIB_VERNUM >= 0x1252 -/* +/* Use Z_SOLO to build source means need own malloc/free */ # define AT_LEAST_ZLIB_1_2_5_2 @@ -133,7 +133,7 @@ typedef struct di_stream { uLong crc32 ; uLong adler32 ; z_stream stream; - uLong bufsize; + uLong bufsize; SV * dictionary ; uLong dict_adler ; int last_error ; @@ -169,7 +169,7 @@ typedef struct di_stream { uLong lastBlockOffset ; unsigned char window_lastByte ; - + #endif } di_stream; @@ -190,7 +190,7 @@ typedef di_stream * Compress__Raw__Zlib__inflateScanStream ; #if defined(AMIGA) || defined(AMIGAOS) || defined(__amigaos4__) # define OS_CODE 0x01 #endif - + #if defined(VAXC) || defined(VMS) # define OS_CODE 0x02 #endif @@ -198,15 +198,15 @@ typedef di_stream * Compress__Raw__Zlib__inflateScanStream ; #if 0 /* VM/CMS */ # define OS_CODE 0x04 #endif - + #if defined(ATARI) || defined(atarist) # define OS_CODE 0x05 #endif - + #ifdef OS2 # define OS_CODE 0x06 #endif - + #if defined(MACOS) || defined(TARGET_OS_MAC) # define OS_CODE 0x07 #endif @@ -214,11 +214,11 @@ typedef di_stream * Compress__Raw__Zlib__inflateScanStream ; #if 0 /* Z-System */ # define OS_CODE 0x08 #endif - + #if 0 /* CP/M */ # define OS_CODE 0x09 #endif - + #ifdef TOPS20 # define OS_CODE 0x0a #endif @@ -226,24 +226,24 @@ typedef di_stream * Compress__Raw__Zlib__inflateScanStream ; #ifdef WIN32 /* Window 95 & Windows NT */ # define OS_CODE 0x0b #endif - + #if 0 /* QDOS */ # define OS_CODE 0x0c #endif - + #if 0 /* Acorn RISCOS */ # define OS_CODE 0x0d #endif - + #if 0 /* ??? */ # define OS_CODE 0x0e #endif - + #ifdef __50SERIES /* Prime/PRIMOS */ # define OS_CODE 0x0F #endif - -/* Default to UNIX */ + +/* Default to UNIX */ #ifndef OS_CODE # define OS_CODE 0x03 /* assume Unix */ #endif @@ -273,7 +273,7 @@ static const char my_z_errmsg[][32] = { sv_setpv(var, ((err) ? GetErrorString(err) : "")) ; \ SvNOK_on(var); - + #if defined(__SYMBIAN32__) # define NO_WRITEABLE_DATA #endif @@ -300,13 +300,13 @@ int error_no ; { dTHX; char * errstr ; - + if (error_no == Z_ERRNO) { errstr = Strerror(errno) ; } else /* errstr = gzerror(fil, &error_no) ; */ - errstr = (char*) my_z_errmsg[2 - error_no]; + errstr = (char*) my_z_errmsg[2 - error_no]; return errstr ; } @@ -324,7 +324,7 @@ int error_no ; /* return the greatest common divisor of a and b using Euclid's algorithm, modified to be fast when one argument much greater than the other, and coded to avoid unnecessary swapping */ -static unsigned +static unsigned #ifdef CAN_PROTOTYPE gcd(unsigned a, unsigned b) #else @@ -352,7 +352,7 @@ gcd(a, b) } /* rotate list[0..len-1] left by rot positions, in place */ -static void +static void #ifdef CAN_PROTOTYPE rotate(unsigned char *list, unsigned len, unsigned rot) #else @@ -515,7 +515,7 @@ void my_zcfree (voidpf opaque, voidpf ptr) { PERL_UNUSED_VAR(opaque); safefree(ptr); - return; + return; } #endif @@ -556,14 +556,14 @@ PostInitStream(s, flags, bufsize, windowBits) s->last_error = 0 ; s->flags = flags ; s->zip_mode = (windowBits < 0) ; - if (flags & FLAG_CRC32) + if (flags & FLAG_CRC32) s->crc32 = crcInitial ; - if (flags & FLAG_ADLER32) + if (flags & FLAG_ADLER32) s->adler32 = adlerInitial ; } -static SV* +static SV* #ifdef CAN_PROTOTYPE deRef(SV * sv, const char * string) #else @@ -608,7 +608,7 @@ char * string ; dTHX; bool wipe = 0 ; STRLEN na; - + SvGETMAGIC(sv); wipe = ! SvOK(sv) ; @@ -654,11 +654,11 @@ flushToBuffer(di_stream* s, int flush) strm->next_in = NULL; strm->avail_in = 0; - + uLong total_output = 0; uLong have = 0; - do + do { if (output) output = (unsigned char *)saferealloc(output, total_output + s->bufsize); @@ -683,7 +683,7 @@ flushToBuffer(di_stream* s, int flush) } while (strm->avail_out == 0); s->deflateParams_out_buffer = output; - s->deflateParams_out_length = total_output; + s->deflateParams_out_length = total_output; return Z_OK; } @@ -703,9 +703,9 @@ flushParams(di_stream* s) strm->next_in = NULL; strm->avail_in = 0; - - do + + do { if (output) output = (unsigned char *)saferealloc(output, total_output + s->bufsize); @@ -719,7 +719,7 @@ flushParams(di_stream* s) /* fprintf(stderr, "deflateParams %d %s %lu\n", ret, GetErrorString(ret), s->bufsize - strm->avail_out); */ - if (ret == Z_STREAM_ERROR) + if (ret == Z_STREAM_ERROR) break; have = s->bufsize - strm->avail_out; @@ -730,10 +730,10 @@ flushParams(di_stream* s) if(ret == Z_STREAM_ERROR) safefree(output); - else + else { s->deflateParams_out_buffer = output; - s->deflateParams_out_length = total_output; + s->deflateParams_out_length = total_output; } return ret; @@ -753,7 +753,7 @@ BOOT: /* Check this version of zlib is == 1 */ if (zlibVersion()[0] != '1') croak("Compress::Raw::Zlib needs zlib version 1.x\n") ; - + { /* Create the $os_code scalar */ SV * os_code_sv = perl_get_sv("Compress::Raw::Zlib::gzip_os_code", GV_ADDMULTI) ; @@ -801,10 +801,10 @@ Zip_adler32(buf, adler=adlerInitial) INIT: /* If the buffer is a reference, dereference it */ sv = deRef(sv, "adler32") ; -#ifdef UTF8_AVAILABLE +#ifdef UTF8_AVAILABLE if (DO_UTF8(sv) && !sv_utf8_downgrade(sv, 1)) croak("Wide character in Compress::Raw::Zlib::adler32"); -#endif +#endif buf = (Byte*)SvPVbyte(sv, len) ; if (items < 2) @@ -815,7 +815,7 @@ Zip_adler32(buf, adler=adlerInitial) adler = adlerInitial; OUTPUT: RETVAL - + #define Zip_crc32(buf, crc, offset) crc32(crc, buf+offset, (uInt)len-offset) uLong @@ -823,15 +823,15 @@ Zip_crc32(buf, crc=crcInitial, offset=0) uLong crc = NO_INIT STRLEN len = NO_INIT Bytef * buf = NO_INIT - STRLEN offset + STRLEN offset SV * sv = ST(0) ; INIT: /* If the buffer is a reference, dereference it */ sv = deRef(sv, "crc32") ; -#ifdef UTF8_AVAILABLE +#ifdef UTF8_AVAILABLE if (DO_UTF8(sv) && !sv_utf8_downgrade(sv, 1)) croak("Wide character in Compress::Raw::Zlib::crc32"); -#endif +#endif buf = (Byte*)SvPVbyte(sv, len) ; if (offset > len) @@ -843,12 +843,12 @@ Zip_crc32(buf, crc=crcInitial, offset=0) crc = SvUV(ST(1)) ; else crc = crcInitial; - + uLong crc32_combine(crc1, crc2, len2) - uLong crc1 - uLong crc2 - z_off_t len2 + uLong crc1 + uLong crc2 + z_off_t len2 CODE: #ifndef AT_LEAST_ZLIB_1_2_2_1 crc1 = crc1; crc2 = crc2 ; len2 = len2; /* Silence -Wall */ @@ -862,9 +862,9 @@ crc32_combine(crc1, crc2, len2) uLong adler32_combine(adler1, adler2, len2) - uLong adler1 - uLong adler2 - z_off_t len2 + uLong adler1 + uLong adler2 + z_off_t len2 CODE: #ifndef AT_LEAST_ZLIB_1_2_2_1 adler1 = adler1; adler2 = adler2 ; len2 = len2; /* Silence -Wall */ @@ -892,8 +892,8 @@ _deflateInit(flags,level, method, windowBits, memLevel, strategy, bufsize, dicti int err ; deflateStream s ; - if (trace) - warn("in _deflateInit(level=%d, method=%d, windowBits=%d, memLevel=%d, strategy=%d, bufsize=%ld dictionary=%p)\n", + if (trace) + warn("in _deflateInit(level=%d, method=%d, windowBits=%d, memLevel=%d, strategy=%d, bufsize=%ld dictionary=%p)\n", level, method, windowBits, memLevel, strategy, bufsize, dictionary) ; if ((s = InitStream() )) { @@ -903,7 +903,7 @@ _deflateInit(flags,level, method, windowBits, memLevel, strategy, bufsize, dicti s->MemLevel = memLevel; s->Strategy = strategy; - err = deflateInit2(&(s->stream), level, + err = deflateInit2(&(s->stream), level, method, windowBits, memLevel, strategy); if (trace) { @@ -914,12 +914,12 @@ _deflateInit(flags,level, method, windowBits, memLevel, strategy, bufsize, dicti /* Check if a dictionary has been specified */ SvGETMAGIC(dictionary); if (err == Z_OK && SvPOK(dictionary) && SvCUR(dictionary)) { -#ifdef UTF8_AVAILABLE +#ifdef UTF8_AVAILABLE if (DO_UTF8(dictionary) && !sv_utf8_downgrade(dictionary, 1)) croak("Wide character in Compress::Raw::Zlib::Deflate::new dicrionary parameter"); -#endif +#endif err = deflateSetDictionary(&(s->stream), (const Bytef*) SvPVX(dictionary), SvCUR(dictionary)) ; - if (trace) + if (trace) warn("deflateSetDictionary returned %d\n", err); s->dict_adler = s->stream.adler ; } @@ -930,13 +930,13 @@ _deflateInit(flags,level, method, windowBits, memLevel, strategy, bufsize, dicti } else PostInitStream(s, flags, bufsize, windowBits) ; - + } else err = Z_MEM_ERROR ; { - SV* obj = sv_setref_pv(sv_newmortal(), + SV* obj = sv_setref_pv(sv_newmortal(), "Compress::Raw::Zlib::deflateStream", (void*)s); XPUSHs(obj); } @@ -955,7 +955,7 @@ _inflateInit(flags, windowBits, bufsize, dictionary) ALIAS: _inflateScanInit = 1 PPCODE: - + int err = Z_OK ; inflateStream s ; #ifndef MAGIC_APPEND @@ -980,7 +980,7 @@ _inflateInit(flags, windowBits, bufsize, dictionary) if (s->WindowBits < 0) { STRLEN dlen; const Bytef* b = (const Bytef*)SvPVbyte(dictionary, dlen); - err = inflateSetDictionary(&(s->stream), + err = inflateSetDictionary(&(s->stream), b, dlen); if (err != Z_OK) { Safefree(s) ; @@ -1006,9 +1006,9 @@ _inflateInit(flags, windowBits, bufsize, dictionary) err = Z_MEM_ERROR ; { - SV* obj = sv_setref_pv(sv_newmortal(), - ix == 1 - ? "Compress::Raw::Zlib::inflateScanStream" + SV* obj = sv_setref_pv(sv_newmortal(), + ix == 1 + ? "Compress::Raw::Zlib::inflateScanStream" : "Compress::Raw::Zlib::inflateStream", (void*)s); XPUSHs(obj); @@ -1018,7 +1018,7 @@ _inflateInit(flags, windowBits, bufsize, dictionary) setDUALstatus(sv, err); XPUSHs(sv) ; } - + MODULE = Compress::Raw::Zlib PACKAGE = Compress::Raw::Zlib::deflateStream @@ -1039,11 +1039,11 @@ deflateReset(s) OUTPUT: RETVAL -DualType +DualType deflate (s, buf, output) Compress::Raw::Zlib::deflateStream s SV * buf - SV * output + SV * output uInt cur_length = NO_INIT uInt increment = NO_INIT uInt prefix = NO_INIT @@ -1055,15 +1055,15 @@ deflate (s, buf, output) /* If the input buffer is a reference, dereference it */ buf = deRef(buf, "deflate") ; - + /* initialise the input buffer */ -#ifdef UTF8_AVAILABLE +#ifdef UTF8_AVAILABLE if (DO_UTF8(buf) && !sv_utf8_downgrade(buf, 1)) croak("Wide character in Compress::Raw::Zlib::Deflate::deflate input parameter"); -#endif +#endif s->stream.next_in = (Bytef*)SvPV_nomg(buf, origlen) ; s->stream.avail_in = origlen; - + if (s->flags & FLAG_CRC32) s->crc32 = crc32(s->crc32, s->stream.next_in, s->stream.avail_in) ; @@ -1072,15 +1072,16 @@ deflate (s, buf, output) /* and retrieve the output buffer */ output = deRef_l(output, "deflate") ; -#ifdef UTF8_AVAILABLE +#ifdef UTF8_AVAILABLE if (DO_UTF8(output) && !sv_utf8_downgrade(output, 1)) croak("Wide character in Compress::Raw::Zlib::Deflate::deflate output parameter"); -#endif +#endif - if((s->flags & FLAG_APPEND) != FLAG_APPEND) { - SvCUR_set(output, 0); - /* sv_setpvn(output, "", 0); */ - } + if((s->flags & FLAG_APPEND) == FLAG_APPEND) { + SvOOK_off(output); + } else { + SvCUR_set(output, 0); + } prefix = cur_length = SvCUR(output) ; s->stream.next_out = (Bytef*) SvPVX(output) + cur_length; increment = SvLEN(output) - cur_length; @@ -1104,8 +1105,8 @@ deflate (s, buf, output) s->stream.next_out = (Bytef*) Sv_Grow(output, SvLEN(output) + plen - s->stream.avail_out) ; s->stream.next_out += cur_length; } - - Copy(s->deflateParams_out_buffer, s->stream.next_out, plen, Bytef) ; + + Copy(s->deflateParams_out_buffer, s->stream.next_out, plen, Bytef) ; cur_length += plen; SvCUR_set(output, cur_length); s->stream.next_out += plen ; @@ -1131,7 +1132,7 @@ deflate (s, buf, output) } if (trace) { - printf("DEFLATE Avail In %d, Out %d\n", s->stream.avail_in, s->stream.avail_out); + printf("DEFLATE Avail In %d, Out %d\n", s->stream.avail_in, s->stream.avail_out); DispStream(s, "BEFORE"); /* Perl_sv_dump(output); */ } @@ -1142,17 +1143,17 @@ deflate (s, buf, output) int done = increment - s->stream.avail_out ; printf("std DEFLATEr returned %d '%s' avail in %d, out %d wrote %d\n", RETVAL, GetErrorString(RETVAL), s->stream.avail_in, -s->stream.avail_out, done); +s->stream.avail_out, done); } */ - + if (trace) { printf("DEFLATE returned %d %s, avail in %d, out %d\n", RETVAL, - GetErrorString(RETVAL), s->stream.avail_in, s->stream.avail_out); + GetErrorString(RETVAL), s->stream.avail_in, s->stream.avail_out); DispStream(s, "AFTER"); } - if (RETVAL != Z_OK) + if (RETVAL != Z_OK) break; } @@ -1167,7 +1168,7 @@ s->stream.avail_out, done); } OUTPUT: RETVAL - + void DESTROY(s) @@ -1188,28 +1189,29 @@ DESTROY(s) DualType flush(s, output, f=Z_FINISH) Compress::Raw::Zlib::deflateStream s - SV * output + SV * output int f uInt cur_length = NO_INIT uInt increment = NO_INIT uInt prefix = NO_INIT uLong bufinc = NO_INIT - uLong availableout = NO_INIT + uLong availableout = NO_INIT CODE: bufinc = s->bufsize; - - - + + + /* retrieve the output buffer */ output = deRef_l(output, "flush") ; -#ifdef UTF8_AVAILABLE +#ifdef UTF8_AVAILABLE if (DO_UTF8(output) && !sv_utf8_downgrade(output, 1)) croak("Wide character in Compress::Raw::Zlib::Deflate::flush input parameter"); -#endif - if((s->flags & FLAG_APPEND) != FLAG_APPEND) { - SvCUR_set(output, 0); - /* sv_setpvn(output, "", 0); */ - } +#endif + if((s->flags & FLAG_APPEND) == FLAG_APPEND) { + SvOOK_off(output); + } else { + SvCUR_set(output, 0); + } prefix = cur_length = SvCUR(output) ; s->stream.next_out = (Bytef*) SvPVX(output) + cur_length; increment = SvLEN(output) - cur_length; @@ -1228,13 +1230,13 @@ flush(s, output, f=Z_FINISH) uLong plen = s->deflateParams_out_length ; /* printf("Copy %lu bytes saved data\n", plen); */ if (s->stream.avail_out < plen) { - /* printf("GROW from %d to %lu\n", s->stream.avail_out, + /* printf("GROW from %d to %lu\n", s->stream.avail_out, SvLEN(output) + plen - s->stream.avail_out); */ s->stream.next_out = (Bytef*) Sv_Grow(output, SvLEN(output) + plen - s->stream.avail_out) ; s->stream.next_out += cur_length; } - - Copy(s->deflateParams_out_buffer, s->stream.next_out, plen, Bytef) ; + + Copy(s->deflateParams_out_buffer, s->stream.next_out, plen, Bytef) ; cur_length += plen; SvCUR_set(output, cur_length); s->stream.next_out += plen ; @@ -1248,7 +1250,7 @@ flush(s, output, f=Z_FINISH) #endif for (;;) { - if (s->stream.avail_out == 0) { + if (s->stream.avail_out == 0) { /* consumed all the available output, so extend it */ s->stream.next_out = (Bytef*) Sv_Grow(output, SvLEN(output) + bufinc) ; cur_length += increment ; @@ -1257,11 +1259,11 @@ flush(s, output, f=Z_FINISH) s->stream.avail_out = increment; bufinc *= 2 ; } - + availableout = s->stream.avail_out ; - + if (trace) { - printf("flush (%d) DEFLATE Avail In %d, Out %d\n", f, s->stream.avail_in, s->stream.avail_out); + printf("flush (%d) DEFLATE Avail In %d, Out %d\n", f, s->stream.avail_in, s->stream.avail_out); DispStream(s, "BEFORE"); /* Perl_sv_dump(output); */ } @@ -1275,29 +1277,29 @@ flush(s, output, f=Z_FINISH) s->stream.avail_out, done); } */ - + if (trace) { printf("flush DEFLATE returned %d '%s', avail in %d, out %d\n", RETVAL, - GetErrorString(RETVAL), s->stream.avail_in, s->stream.avail_out); + GetErrorString(RETVAL), s->stream.avail_in, s->stream.avail_out); DispStream(s, "AFTER"); } /* Ignore the second of two consecutive flushes: */ - if (availableout == s->stream.avail_out && RETVAL == Z_BUF_ERROR) - RETVAL = Z_OK; - + if (availableout == s->stream.avail_out && RETVAL == Z_BUF_ERROR) + RETVAL = Z_OK; + /* deflate has finished flushing only when it hasn't used up - * all the available space in the output buffer: + * all the available space in the output buffer: */ if (s->stream.avail_out != 0 || RETVAL != Z_OK ) break; } - + RETVAL = (RETVAL == Z_STREAM_END ? Z_OK : RETVAL) ; s->last_error = RETVAL ; s->compressedBytes += cur_length + increment - prefix - s->stream.avail_out ; - + if (RETVAL == Z_OK) { SvPOK_only(output); SvCUR_set(output, cur_length + increment - s->stream.avail_out) ; @@ -1316,7 +1318,7 @@ _deflateParams(s, flags, level, strategy, bufsize) uLong bufsize bool changed = FALSE; CODE: - /* printf("_deflateParams(Flags %d Level %d Strategy %d Bufsize %d)\n", flags, level, strategy, bufsize); + /* printf("_deflateParams(Flags %d Level %d Strategy %d Bufsize %d)\n", flags, level, strategy, bufsize); printf("Before -- Level %d, Strategy %d, Bufsize %d\n", s->Level, s->Strategy, s->bufsize); */ if (flags & 1 && level != s->Level) { s->Level = level ; @@ -1327,17 +1329,17 @@ _deflateParams(s, flags, level, strategy, bufsize) changed = TRUE; } if (flags & 4) - s->bufsize = bufsize; + s->bufsize = bufsize; if (changed) { #ifdef SETP_BYTE - s->stream.avail_in = 0; + s->stream.avail_in = 0; s->stream.next_out = &(s->deflateParams_out_byte) ; s->stream.avail_out = 1; RETVAL = deflateParams(&(s->stream), s->Level, s->Strategy); - s->deflateParams_out_valid = + s->deflateParams_out_valid = (RETVAL == Z_OK && s->stream.avail_out == 0) ; #else - /* printf("Level %d Strategy %d, Prev Len %d\n", + /* printf("Level %d Strategy %d, Prev Len %d\n", s->Level, s->Strategy, s->deflateParams_out_length); */ RETVAL = flushParams(s); #endif @@ -1446,7 +1448,7 @@ msg(s) OUTPUT: RETVAL -int +int deflateTune(s, good_length, max_lazy, nice_length, max_chain) Compress::Raw::Zlib::deflateStream s int good_length @@ -1463,7 +1465,7 @@ deflateTune(s, good_length, max_lazy, nice_length, max_chain) #endif OUTPUT: RETVAL - + MODULE = Compress::Raw::Zlib PACKAGE = Compress::Raw::Zlib::inflateStream @@ -1483,23 +1485,23 @@ inflateReset(s) OUTPUT: RETVAL -DualType +DualType inflate (s, buf, output, eof=FALSE) Compress::Raw::Zlib::inflateStream s SV * buf - SV * output - bool eof + SV * output + bool eof uInt cur_length = 0; uInt prefix_length = 0; int increment = 0; uLong bufinc = NO_INIT STRLEN na = NO_INIT ; PREINIT: -#ifdef UTF8_AVAILABLE +#ifdef UTF8_AVAILABLE bool out_utf8 = FALSE; -#endif +#endif STRLEN origlen; - CODE: + CODE: bufinc = s->bufsize; /* If the buffer is a reference, dereference it */ buf = deRef(buf, "inflate") ; @@ -1509,40 +1511,42 @@ inflate (s, buf, output, eof=FALSE) croak("Compress::Raw::Zlib::Inflate::inflate input parameter cannot be read-only when ConsumeInput is specified"); SvPV_force(buf, na); } -#ifdef UTF8_AVAILABLE +#ifdef UTF8_AVAILABLE if (DO_UTF8(buf) && !sv_utf8_downgrade(buf, 1)) croak("Wide character in Compress::Raw::Zlib::Inflate::inflate input parameter"); -#endif - +#endif + /* initialise the input buffer */ s->stream.next_in = (Bytef*)SvPV_nomg(buf, origlen) ; s->stream.avail_in = origlen ; - + /* and retrieve the output buffer */ output = deRef_l(output, "inflate") ; -#ifdef UTF8_AVAILABLE +#ifdef UTF8_AVAILABLE if (DO_UTF8(output)) out_utf8 = TRUE ; if (DO_UTF8(output) && !sv_utf8_downgrade(output, 1)) croak("Wide character in Compress::Raw::Zlib::Inflate::inflate output parameter"); -#endif - if((s->flags & FLAG_APPEND) != FLAG_APPEND) { - SvCUR_set(output, 0); - } - +#endif + if((s->flags & FLAG_APPEND) == FLAG_APPEND) { + SvOOK_off(output); + } else { + SvCUR_set(output, 0); + } + /* Assume no output buffer - the code below will update if there is any available */ s->stream.avail_out = 0; if (SvLEN(output)) { prefix_length = cur_length = SvCUR(output) ; - + if (s->flags & FLAG_LIMIT_OUTPUT && SvLEN(output) - cur_length - 1 < bufinc) { Sv_Grow(output, bufinc + cur_length + 1) ; } - - /* Only setup the stream output pointers if there is spare + + /* Only setup the stream output pointers if there is spare capacity in the outout SV */ if (SvLEN(output) > cur_length + 1) @@ -1552,10 +1556,10 @@ inflate (s, buf, output, eof=FALSE) s->stream.avail_out = increment; } } - + s->bytesInflated = 0; - + RETVAL = Z_OK; while (RETVAL == Z_OK) { @@ -1566,35 +1570,35 @@ inflate (s, buf, output, eof=FALSE) s->stream.next_out += cur_length ; increment = bufinc ; s->stream.avail_out = increment; - bufinc *= 2 ; + bufinc *= 2 ; } /* printf("INFLATE Availl In %d, Out %d\n", s->stream.avail_in, - s->stream.avail_out); + s->stream.avail_out); DispStream(s, "BEFORE"); Perl_sv_dump(output); */ RETVAL = inflate(&(s->stream), Z_SYNC_FLUSH); /* printf("INFLATE returned %d %s, avail in %d, out %d\n", RETVAL, GetErrorString(RETVAL), s->stream.avail_in, s->stream.avail_out); */ - + if (RETVAL == Z_NEED_DICT && s->dictionary) { STRLEN dlen; const Bytef* b = (const Bytef*)SvPV(s->dictionary, dlen) ; s->dict_adler = s->stream.adler ; - RETVAL = inflateSetDictionary(&(s->stream), + RETVAL = inflateSetDictionary(&(s->stream), b, dlen); if (RETVAL == Z_OK) continue; } - - if (s->flags & FLAG_LIMIT_OUTPUT && + + if (s->flags & FLAG_LIMIT_OUTPUT && (RETVAL == Z_OK || RETVAL == Z_BUF_ERROR )) { if (s->stream.avail_out == 0) RETVAL = Z_BUF_ERROR; break; } - if (s->flags & FLAG_LIMIT_OUTPUT && + if (s->flags & FLAG_LIMIT_OUTPUT && (RETVAL == Z_OK || RETVAL == Z_BUF_ERROR )) break; @@ -1611,7 +1615,7 @@ Perl_sv_dump(output); */ } } } -#ifdef NEED_DUMMY_BYTE_AT_END +#ifdef NEED_DUMMY_BYTE_AT_END if (eof && RETVAL == Z_OK && s->flags & FLAG_LIMIT_OUTPUT == 0) { Bytef* nextIn = s->stream.next_in; uInt availIn = s->stream.avail_in; @@ -1633,7 +1637,7 @@ Perl_sv_dump(output); */ #else PERL_UNUSED_VAR(eof); #endif - + s->last_error = RETVAL ; if (RETVAL == Z_OK || RETVAL == Z_STREAM_END || RETVAL == Z_BUF_ERROR || RETVAL == Z_DATA_ERROR) { unsigned in ; @@ -1645,20 +1649,20 @@ Perl_sv_dump(output); */ SvPOK_only(output); SvCUR_set(output, prefix_length + s->bytesInflated) ; *SvEND(output) = '\0'; -#ifdef UTF8_AVAILABLE +#ifdef UTF8_AVAILABLE if (out_utf8) sv_utf8_upgrade(output); -#endif +#endif SvSETMAGIC(output); if (s->flags & FLAG_CRC32 ) - s->crc32 = crc32(s->crc32, - (const Bytef*)SvPVX(output)+prefix_length, + s->crc32 = crc32(s->crc32, + (const Bytef*)SvPVX(output)+prefix_length, SvCUR(output)-prefix_length) ; - if (s->flags & FLAG_ADLER32) - s->adler32 = adler32(s->adler32, - (const Bytef*)SvPVX(output)+prefix_length, + if (s->flags & FLAG_ADLER32) + s->adler32 = adler32(s->adler32, + (const Bytef*)SvPVX(output)+prefix_length, SvCUR(output)-prefix_length) ; /* fix the input buffer */ @@ -1666,7 +1670,7 @@ Perl_sv_dump(output); */ in = s->stream.avail_in ; SvCUR_set(buf, in) ; if (in) - Move(s->stream.next_in, SvPVX(buf), in, char) ; + Move(s->stream.next_in, SvPVX(buf), in, char) ; *SvEND(buf) = '\0'; SvSETMAGIC(buf); } @@ -1700,23 +1704,23 @@ uncompressedBytes(s) RETVAL -DualType +DualType inflateSync (s, buf) Compress::Raw::Zlib::inflateStream s SV * buf CODE: - + /* If the buffer is a reference, dereference it */ buf = deRef(buf, "inflateSync") ; -#ifdef UTF8_AVAILABLE +#ifdef UTF8_AVAILABLE if (DO_UTF8(buf) && !sv_utf8_downgrade(buf, 1)) croak("Wide character in Compress::Raw::Zlib::Inflate::inflateSync"); -#endif - +#endif + /* initialise the input buffer */ s->stream.next_in = (Bytef*)SvPV_force_nomg_nolen(buf) ; s->stream.avail_in = SvCUR(buf) ; - + /* inflateSync doesn't create any output */ s->stream.next_out = (Bytef*) NULL; s->stream.avail_out = 0; @@ -1729,7 +1733,7 @@ inflateSync (s, buf) unsigned in = s->stream.avail_in ; SvCUR_set(buf, in) ; if (in) - Move(s->stream.next_in, SvPVX(buf), in, char) ; + Move(s->stream.next_in, SvPVX(buf), in, char) ; *SvEND(buf) = '\0'; SvSETMAGIC(buf); } @@ -1867,7 +1871,7 @@ inflateReset(s) OUTPUT: RETVAL -DualType +DualType scan(s, buf, out=NULL, eof=FALSE) Compress::Raw::Zlib::inflateScanStream s SV * buf @@ -1884,15 +1888,15 @@ scan(s, buf, out=NULL, eof=FALSE) croak("scan needs zlib 1.2.1 or better"); #else buf = deRef(buf, "inflateScan") ; -#ifdef UTF8_AVAILABLE +#ifdef UTF8_AVAILABLE if (DO_UTF8(buf) && !sv_utf8_downgrade(buf, 1)) croak("Wide character in Compress::Raw::Zlib::InflateScan::scan input parameter"); -#endif +#endif /* initialise the input buffer */ s->stream.next_in = (Bytef*)SvPV_force_nomg_nolen(buf) ; s->stream.avail_in = SvCUR(buf) ; start_len = s->stream.avail_in ; - s->bytesInflated = 0 ; + s->bytesInflated = 0 ; do { if (s->stream.avail_in == 0) { @@ -1917,11 +1921,11 @@ scan(s, buf, out=NULL, eof=FALSE) break ; if (s->flags & FLAG_CRC32 ) - s->crc32 = crc32(s->crc32, s->window + s->window_have, + s->crc32 = crc32(s->crc32, s->window + s->window_have, WINDOW_SIZE - s->window_have - s->stream.avail_out); - if (s->flags & FLAG_ADLER32) - s->adler32 = adler32(s->adler32, s->window + s->window_have, + if (s->flags & FLAG_ADLER32) + s->adler32 = adler32(s->adler32, s->window + s->window_have, WINDOW_SIZE - s->window_have - s->stream.avail_out); s->uncompressedBytes = @@ -1974,7 +1978,7 @@ scan(s, buf, out=NULL, eof=FALSE) unsigned in = s->stream.avail_in ; SvCUR_set(buf, in) ; if (in) - Move(s->stream.next_in, SvPVX(buf), in, char) ; + Move(s->stream.next_in, SvPVX(buf), in, char) ; *SvEND(buf) = '\0'; SvSETMAGIC(buf); } @@ -2098,7 +2102,7 @@ _createDeflateStream(inf_s, flags,level, method, windowBits, memLevel, strategy, s->MemLevel = memLevel; s->Strategy = strategy; - err = deflateInit2(&(s->stream), level, + err = deflateInit2(&(s->stream), level, method, windowBits, memLevel, strategy); if (err == Z_OK) { @@ -2126,7 +2130,7 @@ _createDeflateStream(inf_s, flags,level, method, windowBits, memLevel, strategy, else err = Z_MEM_ERROR ; - XPUSHs(sv_setref_pv(sv_newmortal(), + XPUSHs(sv_setref_pv(sv_newmortal(), "Compress::Raw::Zlib::deflateStream", (void*)s)); if (GIMME == G_ARRAY) { SV * sv = sv_2mortal(newSViv(err)) ; @@ -2160,4 +2164,3 @@ adler32(s) RETVAL = s->adler32 ; OUTPUT: RETVAL - diff --git a/cpan/Compress-Raw-Zlib/lib/Compress/Raw/Zlib.pm b/cpan/Compress-Raw-Zlib/lib/Compress/Raw/Zlib.pm index cf7126b423..59cda238e2 100644 --- a/cpan/Compress-Raw-Zlib/lib/Compress/Raw/Zlib.pm +++ b/cpan/Compress-Raw-Zlib/lib/Compress/Raw/Zlib.pm @@ -10,7 +10,7 @@ use warnings ; use bytes ; our ($VERSION, $XS_VERSION, @ISA, @EXPORT, %EXPORT_TAGS, @EXPORT_OK, $AUTOLOAD, %DEFLATE_CONSTANTS, @DEFLATE_CONSTANTS); -$VERSION = '2.093'; +$VERSION = '2.096'; $XS_VERSION = $VERSION; $VERSION = eval $VERSION; @@ -1559,7 +1559,7 @@ of I<Compress::Raw::Zlib>. =head1 SUPPORT -General feedback/questions/bug reports should be sent to +General feedback/questions/bug reports should be sent to L<https://github.com/pmqs/Compress-Raw-Zlib/issues> (preferred) or L<https://rt.cpan.org/Public/Dist/Display.html?Name=Compress-Raw-Zlib>. @@ -1596,7 +1596,7 @@ See the Changes file. =head1 COPYRIGHT AND LICENSE -Copyright (c) 2005-2019 Paul Marquess. All rights reserved. +Copyright (c) 2005-2020 Paul Marquess. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. diff --git a/cpan/Compress-Raw-Zlib/t/02zlib.t b/cpan/Compress-Raw-Zlib/t/02zlib.t index d7cd513af1..64c894465f 100644 --- a/cpan/Compress-Raw-Zlib/t/02zlib.t +++ b/cpan/Compress-Raw-Zlib/t/02zlib.t @@ -14,8 +14,8 @@ use Test::More ; use CompTestUtils; -BEGIN -{ +BEGIN +{ # use Test::NoWarnings, if available my $extra = 0 ; $extra = 1 @@ -24,13 +24,13 @@ BEGIN my $count = 0 ; if ($] < 5.005) { - $count = 237 ; + $count = 245 ; } elsif ($] >= 5.006) { - $count = 325 ; + $count = 349 ; } else { - $count = 280 ; + $count = 304 ; } plan tests => $count + $extra; @@ -50,7 +50,7 @@ my $len = length $hello ; # Check zlib_version and ZLIB_VERSION are the same. SKIP: { - skip "TEST_SKIP_VERSION_CHECK is set", 1 + skip "TEST_SKIP_VERSION_CHECK is set", 1 if $ENV{TEST_SKIP_VERSION_CHECK}; is Compress::Raw::Zlib::zlib_version, ZLIB_VERSION, "ZLIB_VERSION matches Compress::Raw::Zlib::zlib_version" ; @@ -104,12 +104,12 @@ SKIP: { my $hello = "I am a HAL 9000 computer" ; my @hello = split('', $hello) ; - my ($err, $x, $X, $status); - + my ($err, $x, $X, $status); + ok( ($x, $err) = new Compress::Raw::Zlib::Deflate ( -Bufsize => 1 ), "Create deflate object" ); ok $x, "Compress::Raw::Zlib::Deflate ok" ; cmp_ok $err, '==', Z_OK, "status is Z_OK" ; - + ok ! defined $x->msg() ; is $x->total_in(), 0, "total_in() == 0" ; is $x->total_out(), 0, "total_out() == 0" ; @@ -120,26 +120,26 @@ SKIP: { { $status = $x->deflate($_, $X) ; last unless $status == Z_OK ; - + $Answer .= $X ; } - + cmp_ok $status, '==', Z_OK, "deflate returned Z_OK" ; - + cmp_ok $x->flush($X), '==', Z_OK, "flush returned Z_OK" ; $Answer .= $X ; - + ok ! defined $x->msg() ; is $x->total_in(), length $hello, "total_in ok" ; is $x->total_out(), length $Answer, "total_out ok" ; - + my @Answer = split('', $Answer) ; - + my $k; ok(($k, $err) = new Compress::Raw::Zlib::Inflate( {-Bufsize => 1}) ); ok $k, "Compress::Raw::Zlib::Inflate ok" ; cmp_ok $err, '==', Z_OK, "status is Z_OK" ; - + ok ! defined $k->msg(), "No error messages" ; is $k->total_in(), 0, "total_in() == 0" ; is $k->total_out(), 0, "total_out() == 0" ; @@ -151,9 +151,9 @@ SKIP: { $status = $k->inflate($_, $Z) ; $GOT .= $Z ; last if $status == Z_STREAM_END or $status != Z_OK ; - + } - + cmp_ok $status, '==', Z_STREAM_END, "Got Z_STREAM_END" ; is $GOT, $hello, "uncompressed data matches ok" ; ok ! defined $k->msg(), "No error messages" ; @@ -168,34 +168,34 @@ SKIP: { # ============================== my $hello = 6529 ; - + ok my ($x, $err) = new Compress::Raw::Zlib::Deflate ( -Bufsize => 1, -AppendOutput => 1 ) ; ok $x ; cmp_ok $err, '==', Z_OK ; - + my $status; my $Answer = ''; - + cmp_ok $x->deflate($hello, $Answer), '==', Z_OK ; - + cmp_ok $x->flush($Answer), '==', Z_OK ; - + my @Answer = split('', $Answer) ; - + my $k; ok(($k, $err) = new Compress::Raw::Zlib::Inflate( {-Bufsize => 1, -AppendOutput =>1}) ); ok $k ; cmp_ok $err, '==', Z_OK ; - + #my $GOT = ''; my $GOT ; foreach (@Answer) { $status = $k->inflate($_, $GOT) ; last if $status == Z_STREAM_END or $status != Z_OK ; - + } - + cmp_ok $status, '==', Z_STREAM_END ; is $GOT, $hello ; @@ -211,11 +211,11 @@ SKIP: { my $hello = "I am a HAL 9000 computer" ; my @hello = split('', $hello) ; - + ok my ($x, $err) = new Compress::Raw::Zlib::Deflate ( {-Bufsize => 1, -AppendOutput =>1} ) ; ok $x ; cmp_ok $err, '==', Z_OK ; - + my $status; my $X; foreach (@hello) @@ -223,32 +223,32 @@ SKIP: { $status = $x->deflate($_, $X) ; last unless $status == Z_OK ; } - + cmp_ok $status, '==', Z_OK ; - + cmp_ok $x->flush($X), '==', Z_OK ; - - + + my @Answer = split('', $X) ; - + my $k; ok(($k, $err) = new Compress::Raw::Zlib::Inflate( {-Bufsize => 1, -AppendOutput =>1})); ok $k ; cmp_ok $err, '==', Z_OK ; - + my $Z; foreach (@Answer) { $status = $k->inflate($_, $Z) ; last if $status == Z_STREAM_END or $status != Z_OK ; - + } - + cmp_ok $status, '==', Z_STREAM_END ; is $Z, $hello ; } - + { title "deflate/inflate - larger buffer"; @@ -258,34 +258,34 @@ SKIP: { my $contents = '' ; foreach (1 .. 50000) { $contents .= chr int rand 255 } - - + + ok my ($x, $err) = new Compress::Raw::Zlib::Deflate() ; ok $x ; cmp_ok $err, '==', Z_OK ; - + my (%X, $Y, %Z, $X, $Z); #cmp_ok $x->deflate($contents, $X{key}), '==', Z_OK ; cmp_ok $x->deflate($contents, $X), '==', Z_OK ; - + #$Y = $X{key} ; $Y = $X ; - - + + #cmp_ok $x->flush($X{key}), '==', Z_OK ; #$Y .= $X{key} ; cmp_ok $x->flush($X), '==', Z_OK ; $Y .= $X ; - - - + + + my $keep = $Y ; my $k; ok(($k, $err) = new Compress::Raw::Zlib::Inflate() ); ok $k ; cmp_ok $err, '==', Z_OK ; - + #cmp_ok $k->inflate($Y, $Z{key}), '==', Z_STREAM_END ; #ok $contents eq $Z{key} ; cmp_ok $k->inflate($Y, $Z), '==', Z_STREAM_END ; @@ -296,16 +296,16 @@ SKIP: { ok (($k, $err) = new Compress::Raw::Zlib::Inflate(-AppendOutput => 1)) ; ok $k ; cmp_ok $err, '==', Z_OK ; - - my $s ; + + my $s ; my $out ; my @bits = split('', $keep) ; foreach my $bit (@bits) { $s = $k->inflate($bit, $out) ; } - + cmp_ok $s, '==', Z_STREAM_END ; - + ok $contents eq $out ; @@ -319,16 +319,16 @@ SKIP: { my $dictionary = "hello" ; ok my $x = new Compress::Raw::Zlib::Deflate({-Level => Z_BEST_COMPRESSION, -Dictionary => $dictionary}) ; - + my $dictID = $x->dict_adler() ; my ($X, $Y, $Z); cmp_ok $x->deflate($hello, $X), '==', Z_OK; cmp_ok $x->flush($Y), '==', Z_OK; $X .= $Y ; - + ok my $k = new Compress::Raw::Zlib::Inflate(-Dictionary => $dictionary) ; - + cmp_ok $k->inflate($X, $Z), '==', Z_STREAM_END; is $k->dict_adler(), $dictID; is $hello, $Z ; @@ -338,18 +338,18 @@ SKIP: { title 'inflate - check remaining buffer after Z_STREAM_END'; # and that ConsumeInput works. # =================================================== - + for my $consume ( 0 .. 1) { ok my $x = new Compress::Raw::Zlib::Deflate(-Level => Z_BEST_COMPRESSION ) ; - + my ($X, $Y, $Z); cmp_ok $x->deflate($hello, $X), '==', Z_OK; cmp_ok $x->flush($Y), '==', Z_OK; $X .= $Y ; - + ok my $k = new Compress::Raw::Zlib::Inflate( -ConsumeInput => $consume) ; - + my $first = substr($X, 0, 2) ; my $remember_first = $first ; my $last = substr($X, 2) ; @@ -381,12 +381,12 @@ for my $consume ( 0 .. 1) title 'Check - MAX_WBITS'; # ================= - + my $hello = "Test test test test test"; my @hello = split('', $hello) ; - - ok my ($x, $err) = - new Compress::Raw::Zlib::Deflate ( -Bufsize => 1, + + ok my ($x, $err) = + new Compress::Raw::Zlib::Deflate ( -Bufsize => 1, -WindowBits => -MAX_WBITS(), -AppendOutput => 1 ) ; ok $x ; @@ -399,42 +399,42 @@ for my $consume ( 0 .. 1) $status = $x->deflate($_, $Answer) ; last unless $status == Z_OK ; } - + cmp_ok $status, '==', Z_OK ; - + cmp_ok $x->flush($Answer), '==', Z_OK ; - + my @Answer = split('', $Answer) ; - # Undocumented corner -- extra byte needed to get inflate to return - # Z_STREAM_END when done. - push @Answer, " " ; - + # Undocumented corner -- extra byte needed to get inflate to return + # Z_STREAM_END when done. + push @Answer, " " ; + my $k; - ok(($k, $err) = new Compress::Raw::Zlib::Inflate( - {-Bufsize => 1, + ok(($k, $err) = new Compress::Raw::Zlib::Inflate( + {-Bufsize => 1, -AppendOutput =>1, -WindowBits => -MAX_WBITS()})) ; ok $k ; cmp_ok $err, '==', Z_OK ; - + my $GOT = ''; foreach (@Answer) { $status = $k->inflate($_, $GOT) ; last if $status == Z_STREAM_END or $status != Z_OK ; - + } - + cmp_ok $status, '==', Z_STREAM_END ; is $GOT, $hello ; - + } SKIP: { title 'inflateSync'; - skip "inflateSync needs zlib 1.2.1 or better, you have $Zlib_ver", 22 + skip "inflateSync needs zlib 1.2.1 or better, you have $Zlib_ver", 22 if ZLIB_VERNUM() < 0x1210 ; # create a deflate stream with flush points @@ -443,31 +443,31 @@ SKIP: my $goodbye = "Will I dream?" x 2010; my ($x, $err, $answer, $X, $Z, $status); my $Answer ; - + #use Devel::Peek ; ok(($x, $err) = new Compress::Raw::Zlib::Deflate(AppendOutput => 1)) ; ok $x ; cmp_ok $err, '==', Z_OK ; - + cmp_ok $x->deflate($hello, $Answer), '==', Z_OK; - + # create a flush point cmp_ok $x->flush($Answer, Z_FULL_FLUSH), '==', Z_OK ; - + my $len1 = length $Answer; - + cmp_ok $x->deflate($goodbye, $Answer), '==', Z_OK; - + cmp_ok $x->flush($Answer), '==', Z_OK ; my $len2 = length($Answer) - $len1 ; - + my ($first, @Answer) = split('', $Answer) ; - + my $k; ok(($k, $err) = new Compress::Raw::Zlib::Inflate()) ; ok $k ; cmp_ok $err, '==', Z_OK ; - + cmp_ok $k->inflate($first, $Z), '==', Z_OK; # skip to the first flush point. @@ -479,7 +479,7 @@ SKIP: } cmp_ok $status, '==', Z_OK; - + my $GOT = ''; foreach (@Answer) { @@ -489,7 +489,7 @@ SKIP: # print "x $status\n"; last if $status == Z_STREAM_END or $status != Z_OK ; } - + cmp_ok $status, '==', Z_DATA_ERROR ; is $GOT, $goodbye ; @@ -499,21 +499,21 @@ SKIP: $rest =~ s/^(.)//; my $initial = $1 ; - + ok(($k, $err) = new Compress::Raw::Zlib::Inflate(ConsumeInput => 0)) ; ok $k ; cmp_ok $err, '==', Z_OK ; - + cmp_ok $k->inflate($initial, $Z), '==', Z_OK; # Skip to the flush point $status = $k->inflateSync($rest); cmp_ok $status, '==', Z_OK or diag "status '$status'\nlength rest is " . length($rest) . "\n" ; - + is length($rest), $len2, "expected compressed output"; - - $GOT = ''; + + $GOT = ''; cmp_ok $k->inflate($rest, $GOT), '==', Z_DATA_ERROR, "inflate returns Z_DATA_ERROR"; is $GOT, $goodbye ; } @@ -524,7 +524,7 @@ SKIP: my $hello = "I am a HAL 9000 computer" x 2001 ; my $goodbye = "Will I dream?" x 2010; my ($x, $input, $err, $answer, $X, $status, $Answer); - + ok(($x, $err) = new Compress::Raw::Zlib::Deflate( -AppendOutput => 1, -Level => Z_DEFAULT_COMPRESSION, @@ -534,11 +534,11 @@ SKIP: ok $x->get_Level() == Z_DEFAULT_COMPRESSION; ok $x->get_Strategy() == Z_DEFAULT_STRATEGY; - + $status = $x->deflate($hello, $Answer) ; cmp_ok $status, '==', Z_OK ; $input .= $hello; - + # error cases eval { $x->deflateParams() }; like $@, mkErr('^Compress::Raw::Zlib::deflateParams needs Level and\/or Strategy'); @@ -551,54 +551,54 @@ SKIP: is $x->get_Level(), Z_DEFAULT_COMPRESSION; is $x->get_Strategy(), Z_DEFAULT_STRATEGY; - + # change both Level & Strategy $status = $x->deflateParams(-Level => Z_BEST_SPEED, -Strategy => Z_HUFFMAN_ONLY, -Bufsize => 1234) ; cmp_ok $status, '==', Z_OK ; - + is $x->get_Level(), Z_BEST_SPEED; is $x->get_Strategy(), Z_HUFFMAN_ONLY; - - # change both Level & Strategy again without any calls to deflate + + # change both Level & Strategy again without any calls to deflate $status = $x->deflateParams(-Level => Z_DEFAULT_COMPRESSION, -Strategy => Z_DEFAULT_STRATEGY, -Bufsize => 1234) ; cmp_ok $status, '==', Z_OK ; - + is $x->get_Level(), Z_DEFAULT_COMPRESSION; is $x->get_Strategy(), Z_DEFAULT_STRATEGY; - + $status = $x->deflate($goodbye, $Answer) ; cmp_ok $status, '==', Z_OK ; $input .= $goodbye; - - # change only Level + + # change only Level $status = $x->deflateParams(-Level => Z_NO_COMPRESSION) ; cmp_ok $status, '==', Z_OK ; - + is $x->get_Level(), Z_NO_COMPRESSION; is $x->get_Strategy(), Z_DEFAULT_STRATEGY; - + $status = $x->deflate($goodbye, $Answer) ; cmp_ok $status, '==', Z_OK ; $input .= $goodbye; - + # change only Strategy $status = $x->deflateParams(-Strategy => Z_FILTERED) ; cmp_ok $status, '==', Z_OK ; - + is $x->get_Level(), Z_NO_COMPRESSION; is $x->get_Strategy(), Z_FILTERED; - + $status = $x->deflate($goodbye, $Answer) ; cmp_ok $status, '==', Z_OK ; $input .= $goodbye; - + cmp_ok $x->flush($Answer), '==', Z_OK ; - + my $k; ok(($k, $err) = new Compress::Raw::Zlib::Inflate()) ; ok $k ; cmp_ok $err, '==', Z_OK ; - + my $Z; $status = $k->inflate($Answer, $Z) ; @@ -611,8 +611,8 @@ SKIP: title "ConsumeInput and a read-only buffer trapped" ; ok my $k = new Compress::Raw::Zlib::Inflate(-ConsumeInput => 1) ; - - my $Z; + + my $Z; eval { $k->inflate("abc", $Z) ; }; like $@, mkErr("Compress::Raw::Zlib::Inflate::inflate input parameter cannot be read-only when ConsumeInput is specified"); @@ -628,22 +628,22 @@ foreach (1 .. 2) foreach (1 .. 5000) { $contents .= chr int rand 255 } ok my $x = new Compress::Raw::Zlib::Deflate(-AppendOutput => 1) ; - + my $X ; my $status = $x->deflate(substr($contents,0), $X); cmp_ok $status, '==', Z_OK ; - + cmp_ok $x->flush($X), '==', Z_OK ; - + my $append = "Appended" ; $X .= $append ; - + ok my $k = new Compress::Raw::Zlib::Inflate(-AppendOutput => 1) ; - - my $Z; + + my $Z; my $keep = $X ; $status = $k->inflate(substr($X, 0), $Z) ; - + cmp_ok $status, '==', Z_STREAM_END ; #print "status $status X [$X]\n" ; is $contents, $Z ; @@ -659,34 +659,34 @@ foreach (1 .. 2) my $hello = "I am a HAL 9000 computer" ; my @hello = split('', $hello) ; - my ($err, $x, $X, $status); - + my ($err, $x, $X, $status); + ok( ($x, $err) = new Compress::Raw::Zlib::Deflate ( -Bufsize => 1 ) ); ok $x ; cmp_ok $err, '==', Z_OK ; - + $X = "" ; my $Answer = ''; foreach (@hello) { $status = $x->deflate($_, $X) ; last unless $status == Z_OK ; - + $Answer .= $X ; } - + cmp_ok $status, '==', Z_OK ; - + cmp_ok $x->flush($X), '==', Z_OK ; $Answer .= $X ; - + my @Answer = split('', $Answer) ; - + my $k; ok(($k, $err) = new Compress::Raw::Zlib::Inflate(-AppendOutput => 1) ); ok $k ; cmp_ok $err, '==', Z_OK ; - + my $GOT ; my $Z; $Z = 1 ;#x 2000 ; @@ -695,7 +695,7 @@ foreach (1 .. 2) $status = $k->inflate($_, $GOT) ; last if $status == Z_STREAM_END or $status != Z_OK ; } - + cmp_ok $status, '==', Z_STREAM_END ; is $GOT, $hello ; @@ -715,35 +715,134 @@ if ($] >= 5.005) cmp_ok $x->deflate($data, $X), '==', Z_OK ; cmp_ok $x->flush($X), '==', Z_OK ; - + my $append = "Appended" ; $X .= $append ; my $keep = $X ; - + ok my $k = new Compress::Raw::Zlib::Inflate ( -AppendOutput => 1, -ConsumeInput => 1 ) ; - + cmp_ok $k->inflate(substr($X, 0, -1), $Z), '==', Z_STREAM_END ; ; - + ok $hello eq $Z ; is $X, $append; - + $X = $keep ; $Z = ''; ok $k = new Compress::Raw::Zlib::Inflate ( -AppendOutput => 1, -ConsumeInput => 0 ) ; - + cmp_ok $k->inflate(substr($X, 0, -1), $Z), '==', Z_STREAM_END ; ; #cmp_ok $k->inflate(substr($X, 0), $Z), '==', Z_STREAM_END ; ; - + ok $hello eq $Z ; is $X, $keep; - + +} + +{ + title 'RT#132734: test inflate append OOK output parameter'; + # https://github.com/pmqs/Compress-Raw-Zlib/issues/3 + + my $hello = "I am a HAL 9000 computer" ; + my $data = $hello ; + + my($X, $Z); + + ok my $x = new Compress::Raw::Zlib::Deflate ( -AppendOutput => 1 ); + + cmp_ok $x->deflate($data, $X), '==', Z_OK ; + + cmp_ok $x->flush($X), '==', Z_OK ; + + ok my $k = new Compress::Raw::Zlib::Inflate ( -AppendOutput => 1, + -ConsumeInput => 1 ) ; + $Z = 'prev. ' ; + substr($Z, 0, 4, ''); # chop off first 4 characters using offset + cmp_ok $Z, 'eq', '. ' ; + + # use Devel::Peek ; Dump($Z) ; # shows OOK flag + + # if (1) { # workaround + # my $prev = $Z; + # undef $Z ; + # $Z = $prev ; + # } + + cmp_ok $k->inflate($X, $Z), '==', Z_STREAM_END ; + # use Devel::Peek ; Dump($Z) ; # No OOK flag + + cmp_ok $Z, 'eq', ". $hello" ; +} + + +{ + title 'RT#132734: test deflate append OOK output parameter'; + # https://github.com/pmqs/Compress-Raw-Zlib/issues/3 + + my $hello = "I am a HAL 9000 computer" ; + my $data = $hello ; + + my($X, $Z); + + $X = 'prev. ' ; + substr($X, 0, 6, ''); # chop off all characters using offset + cmp_ok $X, 'eq', '' ; + + # use Devel::Peek ; Dump($X) ; # shows OOK flag + + # if (1) { # workaround + # my $prev = $Z; + # undef $Z ; + # $Z = $prev ; + # } + + ok my $x = new Compress::Raw::Zlib::Deflate ( -AppendOutput => 1 ); + + cmp_ok $x->deflate($data, $X), '==', Z_OK ; + + cmp_ok $x->flush($X), '==', Z_OK ; + + ok my $k = new Compress::Raw::Zlib::Inflate ( -AppendOutput => 1, + -ConsumeInput => 1 ) ; + cmp_ok $k->inflate($X, $Z), '==', Z_STREAM_END ; + + is $Z, $hello ; +} + + +{ + title 'RT#132734: test flush append OOK output parameter'; + # https://github.com/pmqs/Compress-Raw-Zlib/issues/3 + + my $hello = "I am a HAL 9000 computer" ; + my $data = $hello ; + + my($X, $Z); + + my $F = 'prev. ' ; + substr($F, 0, 6, ''); # chop off all characters using offset + cmp_ok $F, 'eq', '' ; + + # use Devel::Peek ; Dump($F) ; # shows OOK flag + + ok my $x = new Compress::Raw::Zlib::Deflate ( -AppendOutput => 1 ); + + cmp_ok $x->deflate($data, $X), '==', Z_OK ; + + cmp_ok $x->flush($F), '==', Z_OK ; + + ok my $k = new Compress::Raw::Zlib::Inflate ( -AppendOutput => 1, + -ConsumeInput => 1 ) ; + cmp_ok $k->inflate($X . $F, $Z), '==', Z_STREAM_END ; + + is $Z, $hello ; } SKIP: { - skip "InflateScan needs zlib 1.2.1 or better, you have $Zlib_ver", 1 + skip "InflateScan needs zlib 1.2.1 or better, you have $Zlib_ver", 1 if ZLIB_VERNUM() < 0x1210 ; # regression - check that resetLastBlockByte can cope with a NULL @@ -758,44 +857,44 @@ SKIP: title "gzip mode"; # ================ - skip "gzip mode needs zlib 1.2.1 or better, you have $Zlib_ver", 13 + skip "gzip mode needs zlib 1.2.1 or better, you have $Zlib_ver", 13 if ZLIB_VERNUM() < 0x1210 ; my $hello = "I am a HAL 9000 computer" ; my @hello = split('', $hello) ; - my ($err, $x, $X, $status); - - ok( ($x, $err) = new Compress::Raw::Zlib::Deflate ( + my ($err, $x, $X, $status); + + ok( ($x, $err) = new Compress::Raw::Zlib::Deflate ( WindowBits => WANT_GZIP , AppendOutput => 1 ), "Create deflate object" ); ok $x, "Compress::Raw::Zlib::Deflate ok" ; cmp_ok $err, '==', Z_OK, "status is Z_OK" ; - + $status = $x->deflate($hello, $X) ; cmp_ok $status, '==', Z_OK, "deflate returned Z_OK" ; - + cmp_ok $x->flush($X), '==', Z_OK, "flush returned Z_OK" ; - - my ($k, $GOT); - ($k, $err) = new Compress::Raw::Zlib::Inflate( + + my ($k, $GOT); + ($k, $err) = new Compress::Raw::Zlib::Inflate( WindowBits => WANT_GZIP , ConsumeInput => 0 , AppendOutput => 1); ok $k, "Compress::Raw::Zlib::Inflate WANT_GZIP ok" ; cmp_ok $err, '==', Z_OK, "status is Z_OK" ; - + $status = $k->inflate($X, $GOT) ; cmp_ok $status, '==', Z_STREAM_END, "Got Z_STREAM_END" ; is $GOT, $hello, "uncompressed data matches ok" ; $GOT = ''; - ($k, $err) = new Compress::Raw::Zlib::Inflate( + ($k, $err) = new Compress::Raw::Zlib::Inflate( WindowBits => WANT_GZIP_OR_ZLIB , AppendOutput => 1); ok $k, "Compress::Raw::Zlib::Inflate WANT_GZIP_OR_ZLIB ok" ; cmp_ok $err, '==', Z_OK, "status is Z_OK" ; - + $status = $k->inflate($X, $GOT) ; cmp_ok $status, '==', Z_STREAM_END, "Got Z_STREAM_END" ; is $GOT, $hello, "uncompressed data matches ok" ; @@ -810,42 +909,42 @@ SKIP: # then read with WANT_GZIP_OR_ZLIB - thi swill work # ================ - skip "gzip mode needs zlib 1.2.1 or better, you have $Zlib_ver", 12 + skip "gzip mode needs zlib 1.2.1 or better, you have $Zlib_ver", 12 if ZLIB_VERNUM() < 0x1210 ; my $hello = "I am a HAL 9000 computer" ; - my ($err, $x, $X, $status); - - ok( ($x, $err) = new Compress::Raw::Zlib::Deflate ( + my ($err, $x, $X, $status); + + ok( ($x, $err) = new Compress::Raw::Zlib::Deflate ( WindowBits => WANT_GZIP , AppendOutput => 1 ), "Create deflate object" ); ok $x, "Compress::Raw::Zlib::Deflate ok" ; cmp_ok $err, '==', Z_OK, "status is Z_OK" ; - + $status = $x->deflate($hello, $X) ; cmp_ok $status, '==', Z_OK, "deflate returned Z_OK" ; - + cmp_ok $x->flush($X), '==', Z_OK, "flush returned Z_OK" ; - - my ($k, $GOT); - ($k, $err) = new Compress::Raw::Zlib::Inflate( + + my ($k, $GOT); + ($k, $err) = new Compress::Raw::Zlib::Inflate( WindowBits => MAX_WBITS , ConsumeInput => 0 , AppendOutput => 1); ok $k, "Compress::Raw::Zlib::Inflate WANT_GZIP ok" ; cmp_ok $err, '==', Z_OK, "status is Z_OK" ; - + $status = $k->inflate($X, $GOT) ; cmp_ok $status, '==', Z_DATA_ERROR, "Got Z_DATA_ERROR" ; $GOT = ''; - ($k, $err) = new Compress::Raw::Zlib::Inflate( + ($k, $err) = new Compress::Raw::Zlib::Inflate( WindowBits => WANT_GZIP_OR_ZLIB , AppendOutput => 1); ok $k, "Compress::Raw::Zlib::Inflate WANT_GZIP_OR_ZLIB ok" ; cmp_ok $err, '==', Z_OK, "status is Z_OK" ; - + $status = $k->inflate($X, $GOT) ; cmp_ok $status, '==', Z_STREAM_END, "Got Z_STREAM_END" ; is $GOT, $hello, "uncompressed data matches ok" ; @@ -859,41 +958,41 @@ SKIP: # then read with WANT_GZIP_OR_ZLIB - thi swill work # ================ - skip "gzip mode needs zlib 1.2.1 or better, you have $Zlib_ver", 12 + skip "gzip mode needs zlib 1.2.1 or better, you have $Zlib_ver", 12 if ZLIB_VERNUM() < 0x1210 ; my $hello = "I am a HAL 9000 computer" ; - my ($err, $x, $X, $status); - - ok( ($x, $err) = new Compress::Raw::Zlib::Deflate ( + my ($err, $x, $X, $status); + + ok( ($x, $err) = new Compress::Raw::Zlib::Deflate ( AppendOutput => 1 ), "Create deflate object" ); ok $x, "Compress::Raw::Zlib::Deflate ok" ; cmp_ok $err, '==', Z_OK, "status is Z_OK" ; - + $status = $x->deflate($hello, $X) ; cmp_ok $status, '==', Z_OK, "deflate returned Z_OK" ; - + cmp_ok $x->flush($X), '==', Z_OK, "flush returned Z_OK" ; - - my ($k, $GOT); - ($k, $err) = new Compress::Raw::Zlib::Inflate( + + my ($k, $GOT); + ($k, $err) = new Compress::Raw::Zlib::Inflate( WindowBits => WANT_GZIP , ConsumeInput => 0 , AppendOutput => 1); ok $k, "Compress::Raw::Zlib::Inflate WANT_GZIP ok" ; cmp_ok $err, '==', Z_OK, "status is Z_OK" ; - + $status = $k->inflate($X, $GOT) ; cmp_ok $status, '==', Z_DATA_ERROR, "Got Z_DATA_ERROR" ; $GOT = ''; - ($k, $err) = new Compress::Raw::Zlib::Inflate( + ($k, $err) = new Compress::Raw::Zlib::Inflate( WindowBits => WANT_GZIP_OR_ZLIB , AppendOutput => 1); ok $k, "Compress::Raw::Zlib::Inflate WANT_GZIP_OR_ZLIB ok" ; cmp_ok $err, '==', Z_OK, "status is Z_OK" ; - + $status = $k->inflate($X, $GOT) ; cmp_ok $status, '==', Z_STREAM_END, "Got Z_STREAM_END" ; is $GOT, $hello, "uncompressed data matches ok" ; @@ -918,17 +1017,17 @@ SKIP: title "repeated calls to flush after some compression"; my $hello = "I am a HAL 9000 computer" ; - my ($err, $x, $X, $status); - + my ($err, $x, $X, $status); + ok( ($x, $err) = new Compress::Raw::Zlib::Deflate ( ), "Create deflate object" ); isa_ok $x, "Compress::Raw::Zlib::deflateStream" ; cmp_ok $err, '==', Z_OK, "status is Z_OK" ; - + $status = $x->deflate($hello, $X) ; cmp_ok $status, '==', Z_OK, "deflate returned Z_OK" ; - - cmp_ok $x->flush($X, Z_SYNC_FLUSH), '==', Z_OK, "flush returned Z_OK" ; - cmp_ok $x->flush($X, Z_SYNC_FLUSH), '==', Z_OK, "second flush returned Z_OK" ; + + cmp_ok $x->flush($X, Z_SYNC_FLUSH), '==', Z_OK, "flush returned Z_OK" ; + cmp_ok $x->flush($X, Z_SYNC_FLUSH), '==', Z_OK, "second flush returned Z_OK" ; is $X, "", "no output from second flush"; } @@ -936,14 +1035,14 @@ SKIP: title "repeated calls to flush - no compression"; my $hello = "I am a HAL 9000 computer" ; - my ($err, $x, $X, $status); - + my ($err, $x, $X, $status); + ok( ($x, $err) = new Compress::Raw::Zlib::Deflate ( ), "Create deflate object" ); isa_ok $x, "Compress::Raw::Zlib::deflateStream" ; cmp_ok $err, '==', Z_OK, "status is Z_OK" ; - - cmp_ok $x->flush($X, Z_SYNC_FLUSH), '==', Z_OK, "flush returned Z_OK" ; - cmp_ok $x->flush($X, Z_SYNC_FLUSH), '==', Z_OK, "second flush returned Z_OK" ; + + cmp_ok $x->flush($X, Z_SYNC_FLUSH), '==', Z_OK, "flush returned Z_OK" ; + cmp_ok $x->flush($X, Z_SYNC_FLUSH), '==', Z_OK, "second flush returned Z_OK" ; is $X, "", "no output from second flush"; } @@ -963,14 +1062,14 @@ if (0) title "RT #122695: sync flush appending extra empty uncompressed block"; my $hello = "I am a HAL 9000 computer" ; - my ($err, $x, $X, $status); - + my ($err, $x, $X, $status); + ok( ($x, $err) = new Compress::Raw::Zlib::Deflate ( ), "Create deflate object" ); isa_ok $x, "Compress::Raw::Zlib::deflateStream" ; cmp_ok $err, '==', Z_OK, "status is Z_OK" ; - - cmp_ok $x->flush($X, Z_SYNC_FLUSH), '==', Z_OK, "flush returned Z_OK" ; - cmp_ok $x->flush($X, Z_SYNC_FLUSH), '==', Z_OK, "second flush returned Z_OK" ; + + cmp_ok $x->flush($X, Z_SYNC_FLUSH), '==', Z_OK, "flush returned Z_OK" ; + cmp_ok $x->flush($X, Z_SYNC_FLUSH), '==', Z_OK, "second flush returned Z_OK" ; is $X, "", "no output from second flush"; } @@ -982,36 +1081,36 @@ foreach (1 .. 2) my $hello = "I am a HAL 9000 computer" ; my @hello = split('', $hello) ; - my ($err, $x, $X, $status); - + my ($err, $x, $X, $status); + ok( ($x, $err) = new Compress::Raw::Zlib::Deflate ( -Bufsize => 1, -AppendOutput => 1 ) ); ok $x ; cmp_ok $err, '==', Z_OK ; - + $X = "" ; my $Answer = ''; foreach (@hello) { $status = $x->deflate($_, substr($Answer, length($Answer))) ; last unless $status == Z_OK ; - + } - + cmp_ok $status, '==', Z_OK ; - + cmp_ok $x->flush(substr($Answer, length($Answer))), '==', Z_OK ; - + #cmp_ok length $Answer, ">", 0 ; my @Answer = split('', $Answer) ; - - + + my $k; ok(($k, $err) = new Compress::Raw::Zlib::Inflate(-AppendOutput => 1) ); ok $k ; cmp_ok $err, '==', Z_OK ; - + my $GOT = ''; my $Z; $Z = 1 ;#x 2000 ; @@ -1020,7 +1119,7 @@ foreach (1 .. 2) $status = $k->inflate($_, substr($GOT, length($GOT))) ; last if $status == Z_STREAM_END or $status != Z_OK ; } - + cmp_ok $status, '==', Z_STREAM_END ; is $GOT, $hello ; @@ -1032,33 +1131,33 @@ foreach (1 .. 2) my $hello = "I am a HAL 9000 computer" ; my @hello = split('', $hello) ; - my ($err, $x, $X, $status); - + my ($err, $x, $X, $status); + ok( ($x, $err) = new Compress::Raw::Zlib::Deflate ( -Bufsize => 1, -AppendOutput => 1 ) ); ok $x ; cmp_ok $err, '==', Z_OK ; - + $X = "" ; my $Answer = ''; foreach (@hello) { $status = $x->deflate($_, substr($Answer, 0)) ; last unless $status == Z_OK ; - + } - + cmp_ok $status, '==', Z_OK ; - + cmp_ok $x->flush(substr($Answer, 0)), '==', Z_OK ; - + my @Answer = split('', $Answer) ; - + my $k; ok(($k, $err) = new Compress::Raw::Zlib::Inflate(-AppendOutput => 1) ); ok $k ; cmp_ok $err, '==', Z_OK ; - + my $GOT = ''; my $Z; $Z = 1 ;#x 2000 ; @@ -1067,8 +1166,7 @@ foreach (1 .. 2) $status = $k->inflate($_, substr($GOT, 0)) ; last if $status == Z_STREAM_END or $status != Z_OK ; } - + cmp_ok $status, '==', Z_STREAM_END ; is $GOT, $hello ; } - |