Skip to content

Commit 28b75fe

Browse files
committed
1 parent 4b9a5a9 commit 28b75fe

File tree

9 files changed

+94
-54
lines changed

9 files changed

+94
-54
lines changed

vendor/zlib/deflate.c

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -719,6 +719,14 @@ int ZEXPORT deflatePending(z_streamp strm, unsigned *pending, int *bits) {
719719
return Z_OK;
720720
}
721721

722+
/* ========================================================================= */
723+
int ZEXPORT deflateUsed(z_streamp strm, int *bits) {
724+
if (deflateStateCheck(strm)) return Z_STREAM_ERROR;
725+
if (bits != Z_NULL)
726+
*bits = strm->state->bi_used;
727+
return Z_OK;
728+
}
729+
722730
/* ========================================================================= */
723731
int ZEXPORT deflatePrime(z_streamp strm, int bits, int value) {
724732
deflate_state *s;
@@ -1746,8 +1754,10 @@ local block_state deflate_stored(deflate_state *s, int flush) {
17461754
s->high_water = s->strstart;
17471755

17481756
/* If the last block was written to next_out, then done. */
1749-
if (last)
1757+
if (last) {
1758+
s->bi_used = 8;
17501759
return finish_done;
1760+
}
17511761

17521762
/* If flushing and all input has been consumed, then done. */
17531763
if (flush != Z_NO_FLUSH && flush != Z_FINISH &&
@@ -1799,6 +1809,8 @@ local block_state deflate_stored(deflate_state *s, int flush) {
17991809
}
18001810

18011811
/* We've done all we can with the available input and output. */
1812+
if (last)
1813+
s->bi_used = 8;
18021814
return last ? finish_started : need_more;
18031815
}
18041816

vendor/zlib/deflate.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,9 @@ typedef struct internal_state {
271271
/* Number of valid bits in bi_buf. All bits above the last valid bit
272272
* are always zero.
273273
*/
274+
int bi_used;
275+
/* Last number of used bits when going to a byte boundary.
276+
*/
274277

275278
ulg high_water;
276279
/* High water mark offset in window for initialized bytes -- bytes above

vendor/zlib/infback.c

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ int ZEXPORT inflateBackInit_(z_streamp strm, int windowBits,
4646
#ifdef Z_SOLO
4747
return Z_STREAM_ERROR;
4848
#else
49-
strm->zfree = zcfree;
49+
strm->zfree = zcfree;
5050
#endif
5151
state = (struct inflate_state FAR *)ZALLOC(strm, 1,
5252
sizeof(struct inflate_state));
@@ -304,7 +304,7 @@ int ZEXPORT inflateBack(z_streamp strm, in_func in, void FAR *in_desc,
304304
state->mode = TABLE;
305305
break;
306306
case 3:
307-
strm->msg = (char *)"invalid block type";
307+
strm->msg = (z_const char *)"invalid block type";
308308
state->mode = BAD;
309309
}
310310
DROPBITS(2);
@@ -315,7 +315,7 @@ int ZEXPORT inflateBack(z_streamp strm, in_func in, void FAR *in_desc,
315315
BYTEBITS(); /* go to byte boundary */
316316
NEEDBITS(32);
317317
if ((hold & 0xffff) != ((hold >> 16) ^ 0xffff)) {
318-
strm->msg = (char *)"invalid stored block lengths";
318+
strm->msg = (z_const char *)"invalid stored block lengths";
319319
state->mode = BAD;
320320
break;
321321
}
@@ -353,7 +353,7 @@ int ZEXPORT inflateBack(z_streamp strm, in_func in, void FAR *in_desc,
353353
DROPBITS(4);
354354
#ifndef PKZIP_BUG_WORKAROUND
355355
if (state->nlen > 286 || state->ndist > 30) {
356-
strm->msg = (char *)"too many length or distance symbols";
356+
strm->msg = (z_const char *)"too many length or distance symbols";
357357
state->mode = BAD;
358358
break;
359359
}
@@ -375,7 +375,7 @@ int ZEXPORT inflateBack(z_streamp strm, in_func in, void FAR *in_desc,
375375
ret = inflate_table(CODES, state->lens, 19, &(state->next),
376376
&(state->lenbits), state->work);
377377
if (ret) {
378-
strm->msg = (char *)"invalid code lengths set";
378+
strm->msg = (z_const char *)"invalid code lengths set";
379379
state->mode = BAD;
380380
break;
381381
}
@@ -398,7 +398,7 @@ int ZEXPORT inflateBack(z_streamp strm, in_func in, void FAR *in_desc,
398398
NEEDBITS(here.bits + 2);
399399
DROPBITS(here.bits);
400400
if (state->have == 0) {
401-
strm->msg = (char *)"invalid bit length repeat";
401+
strm->msg = (z_const char *)"invalid bit length repeat";
402402
state->mode = BAD;
403403
break;
404404
}
@@ -421,7 +421,7 @@ int ZEXPORT inflateBack(z_streamp strm, in_func in, void FAR *in_desc,
421421
DROPBITS(7);
422422
}
423423
if (state->have + copy > state->nlen + state->ndist) {
424-
strm->msg = (char *)"invalid bit length repeat";
424+
strm->msg = (z_const char *)"invalid bit length repeat";
425425
state->mode = BAD;
426426
break;
427427
}
@@ -435,7 +435,7 @@ int ZEXPORT inflateBack(z_streamp strm, in_func in, void FAR *in_desc,
435435

436436
/* check for end-of-block code (better have one) */
437437
if (state->lens[256] == 0) {
438-
strm->msg = (char *)"invalid code -- missing end-of-block";
438+
strm->msg = (z_const char *)"invalid code -- missing end-of-block";
439439
state->mode = BAD;
440440
break;
441441
}
@@ -449,7 +449,7 @@ int ZEXPORT inflateBack(z_streamp strm, in_func in, void FAR *in_desc,
449449
ret = inflate_table(LENS, state->lens, state->nlen, &(state->next),
450450
&(state->lenbits), state->work);
451451
if (ret) {
452-
strm->msg = (char *)"invalid literal/lengths set";
452+
strm->msg = (z_const char *)"invalid literal/lengths set";
453453
state->mode = BAD;
454454
break;
455455
}
@@ -458,7 +458,7 @@ int ZEXPORT inflateBack(z_streamp strm, in_func in, void FAR *in_desc,
458458
ret = inflate_table(DISTS, state->lens + state->nlen, state->ndist,
459459
&(state->next), &(state->distbits), state->work);
460460
if (ret) {
461-
strm->msg = (char *)"invalid distances set";
461+
strm->msg = (z_const char *)"invalid distances set";
462462
state->mode = BAD;
463463
break;
464464
}
@@ -517,7 +517,7 @@ int ZEXPORT inflateBack(z_streamp strm, in_func in, void FAR *in_desc,
517517

518518
/* invalid code */
519519
if (here.op & 64) {
520-
strm->msg = (char *)"invalid literal/length code";
520+
strm->msg = (z_const char *)"invalid literal/length code";
521521
state->mode = BAD;
522522
break;
523523
}
@@ -549,7 +549,7 @@ int ZEXPORT inflateBack(z_streamp strm, in_func in, void FAR *in_desc,
549549
}
550550
DROPBITS(here.bits);
551551
if (here.op & 64) {
552-
strm->msg = (char *)"invalid distance code";
552+
strm->msg = (z_const char *)"invalid distance code";
553553
state->mode = BAD;
554554
break;
555555
}
@@ -564,7 +564,7 @@ int ZEXPORT inflateBack(z_streamp strm, in_func in, void FAR *in_desc,
564564
}
565565
if (state->offset > state->wsize - (state->whave < state->wsize ?
566566
left : 0)) {
567-
strm->msg = (char *)"invalid distance too far back";
567+
strm->msg = (z_const char *)"invalid distance too far back";
568568
state->mode = BAD;
569569
break;
570570
}

vendor/zlib/inffast.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ void ZLIB_INTERNAL inflate_fast(z_streamp strm, unsigned start) {
155155
dist += (unsigned)hold & ((1U << op) - 1);
156156
#ifdef INFLATE_STRICT
157157
if (dist > dmax) {
158-
strm->msg = (char *)"invalid distance too far back";
158+
strm->msg = (z_const char *)"invalid distance too far back";
159159
state->mode = BAD;
160160
break;
161161
}
@@ -169,7 +169,7 @@ void ZLIB_INTERNAL inflate_fast(z_streamp strm, unsigned start) {
169169
if (op > whave) {
170170
if (state->sane) {
171171
strm->msg =
172-
(char *)"invalid distance too far back";
172+
(z_const char *)"invalid distance too far back";
173173
state->mode = BAD;
174174
break;
175175
}
@@ -265,7 +265,7 @@ void ZLIB_INTERNAL inflate_fast(z_streamp strm, unsigned start) {
265265
goto dodist;
266266
}
267267
else {
268-
strm->msg = (char *)"invalid distance code";
268+
strm->msg = (z_const char *)"invalid distance code";
269269
state->mode = BAD;
270270
break;
271271
}
@@ -280,7 +280,7 @@ void ZLIB_INTERNAL inflate_fast(z_streamp strm, unsigned start) {
280280
break;
281281
}
282282
else {
283-
strm->msg = (char *)"invalid literal/length code";
283+
strm->msg = (z_const char *)"invalid literal/length code";
284284
state->mode = BAD;
285285
break;
286286
}

vendor/zlib/inflate.c

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -642,12 +642,12 @@ int ZEXPORT inflate(z_streamp strm, int flush) {
642642
if (
643643
#endif
644644
((BITS(8) << 8) + (hold >> 8)) % 31) {
645-
strm->msg = (char *)"incorrect header check";
645+
strm->msg = (z_const char *)"incorrect header check";
646646
state->mode = BAD;
647647
break;
648648
}
649649
if (BITS(4) != Z_DEFLATED) {
650-
strm->msg = (char *)"unknown compression method";
650+
strm->msg = (z_const char *)"unknown compression method";
651651
state->mode = BAD;
652652
break;
653653
}
@@ -656,7 +656,7 @@ int ZEXPORT inflate(z_streamp strm, int flush) {
656656
if (state->wbits == 0)
657657
state->wbits = len;
658658
if (len > 15 || len > state->wbits) {
659-
strm->msg = (char *)"invalid window size";
659+
strm->msg = (z_const char *)"invalid window size";
660660
state->mode = BAD;
661661
break;
662662
}
@@ -672,12 +672,12 @@ int ZEXPORT inflate(z_streamp strm, int flush) {
672672
NEEDBITS(16);
673673
state->flags = (int)(hold);
674674
if ((state->flags & 0xff) != Z_DEFLATED) {
675-
strm->msg = (char *)"unknown compression method";
675+
strm->msg = (z_const char *)"unknown compression method";
676676
state->mode = BAD;
677677
break;
678678
}
679679
if (state->flags & 0xe000) {
680-
strm->msg = (char *)"unknown header flags set";
680+
strm->msg = (z_const char *)"unknown header flags set";
681681
state->mode = BAD;
682682
break;
683683
}
@@ -793,7 +793,7 @@ int ZEXPORT inflate(z_streamp strm, int flush) {
793793
if (state->flags & 0x0200) {
794794
NEEDBITS(16);
795795
if ((state->wrap & 4) && hold != (state->check & 0xffff)) {
796-
strm->msg = (char *)"header crc mismatch";
796+
strm->msg = (z_const char *)"header crc mismatch";
797797
state->mode = BAD;
798798
break;
799799
}
@@ -855,7 +855,7 @@ int ZEXPORT inflate(z_streamp strm, int flush) {
855855
state->mode = TABLE;
856856
break;
857857
case 3:
858-
strm->msg = (char *)"invalid block type";
858+
strm->msg = (z_const char *)"invalid block type";
859859
state->mode = BAD;
860860
}
861861
DROPBITS(2);
@@ -864,7 +864,7 @@ int ZEXPORT inflate(z_streamp strm, int flush) {
864864
BYTEBITS(); /* go to byte boundary */
865865
NEEDBITS(32);
866866
if ((hold & 0xffff) != ((hold >> 16) ^ 0xffff)) {
867-
strm->msg = (char *)"invalid stored block lengths";
867+
strm->msg = (z_const char *)"invalid stored block lengths";
868868
state->mode = BAD;
869869
break;
870870
}
@@ -905,7 +905,7 @@ int ZEXPORT inflate(z_streamp strm, int flush) {
905905
DROPBITS(4);
906906
#ifndef PKZIP_BUG_WORKAROUND
907907
if (state->nlen > 286 || state->ndist > 30) {
908-
strm->msg = (char *)"too many length or distance symbols";
908+
strm->msg = (z_const char *)"too many length or distance symbols";
909909
state->mode = BAD;
910910
break;
911911
}
@@ -923,12 +923,12 @@ int ZEXPORT inflate(z_streamp strm, int flush) {
923923
while (state->have < 19)
924924
state->lens[order[state->have++]] = 0;
925925
state->next = state->codes;
926-
state->lencode = (const code FAR *)(state->next);
926+
state->lencode = state->distcode = (const code FAR *)(state->next);
927927
state->lenbits = 7;
928928
ret = inflate_table(CODES, state->lens, 19, &(state->next),
929929
&(state->lenbits), state->work);
930930
if (ret) {
931-
strm->msg = (char *)"invalid code lengths set";
931+
strm->msg = (z_const char *)"invalid code lengths set";
932932
state->mode = BAD;
933933
break;
934934
}
@@ -952,7 +952,7 @@ int ZEXPORT inflate(z_streamp strm, int flush) {
952952
NEEDBITS(here.bits + 2);
953953
DROPBITS(here.bits);
954954
if (state->have == 0) {
955-
strm->msg = (char *)"invalid bit length repeat";
955+
strm->msg = (z_const char *)"invalid bit length repeat";
956956
state->mode = BAD;
957957
break;
958958
}
@@ -975,7 +975,7 @@ int ZEXPORT inflate(z_streamp strm, int flush) {
975975
DROPBITS(7);
976976
}
977977
if (state->have + copy > state->nlen + state->ndist) {
978-
strm->msg = (char *)"invalid bit length repeat";
978+
strm->msg = (z_const char *)"invalid bit length repeat";
979979
state->mode = BAD;
980980
break;
981981
}
@@ -989,7 +989,7 @@ int ZEXPORT inflate(z_streamp strm, int flush) {
989989

990990
/* check for end-of-block code (better have one) */
991991
if (state->lens[256] == 0) {
992-
strm->msg = (char *)"invalid code -- missing end-of-block";
992+
strm->msg = (z_const char *)"invalid code -- missing end-of-block";
993993
state->mode = BAD;
994994
break;
995995
}
@@ -1003,7 +1003,7 @@ int ZEXPORT inflate(z_streamp strm, int flush) {
10031003
ret = inflate_table(LENS, state->lens, state->nlen, &(state->next),
10041004
&(state->lenbits), state->work);
10051005
if (ret) {
1006-
strm->msg = (char *)"invalid literal/lengths set";
1006+
strm->msg = (z_const char *)"invalid literal/lengths set";
10071007
state->mode = BAD;
10081008
break;
10091009
}
@@ -1012,7 +1012,7 @@ int ZEXPORT inflate(z_streamp strm, int flush) {
10121012
ret = inflate_table(DISTS, state->lens + state->nlen, state->ndist,
10131013
&(state->next), &(state->distbits), state->work);
10141014
if (ret) {
1015-
strm->msg = (char *)"invalid distances set";
1015+
strm->msg = (z_const char *)"invalid distances set";
10161016
state->mode = BAD;
10171017
break;
10181018
}
@@ -1066,7 +1066,7 @@ int ZEXPORT inflate(z_streamp strm, int flush) {
10661066
break;
10671067
}
10681068
if (here.op & 64) {
1069-
strm->msg = (char *)"invalid literal/length code";
1069+
strm->msg = (z_const char *)"invalid literal/length code";
10701070
state->mode = BAD;
10711071
break;
10721072
}
@@ -1104,7 +1104,7 @@ int ZEXPORT inflate(z_streamp strm, int flush) {
11041104
DROPBITS(here.bits);
11051105
state->back += here.bits;
11061106
if (here.op & 64) {
1107-
strm->msg = (char *)"invalid distance code";
1107+
strm->msg = (z_const char *)"invalid distance code";
11081108
state->mode = BAD;
11091109
break;
11101110
}
@@ -1121,7 +1121,7 @@ int ZEXPORT inflate(z_streamp strm, int flush) {
11211121
}
11221122
#ifdef INFLATE_STRICT
11231123
if (state->offset > state->dmax) {
1124-
strm->msg = (char *)"invalid distance too far back";
1124+
strm->msg = (z_const char *)"invalid distance too far back";
11251125
state->mode = BAD;
11261126
break;
11271127
}
@@ -1136,7 +1136,7 @@ int ZEXPORT inflate(z_streamp strm, int flush) {
11361136
copy = state->offset - copy;
11371137
if (copy > state->whave) {
11381138
if (state->sane) {
1139-
strm->msg = (char *)"invalid distance too far back";
1139+
strm->msg = (z_const char *)"invalid distance too far back";
11401140
state->mode = BAD;
11411141
break;
11421142
}
@@ -1195,7 +1195,7 @@ int ZEXPORT inflate(z_streamp strm, int flush) {
11951195
state->flags ? hold :
11961196
#endif
11971197
ZSWAP32(hold)) != state->check) {
1198-
strm->msg = (char *)"incorrect data check";
1198+
strm->msg = (z_const char *)"incorrect data check";
11991199
state->mode = BAD;
12001200
break;
12011201
}
@@ -1209,7 +1209,7 @@ int ZEXPORT inflate(z_streamp strm, int flush) {
12091209
if (state->wrap && state->flags) {
12101210
NEEDBITS(32);
12111211
if ((state->wrap & 4) && hold != (state->total & 0xffffffff)) {
1212-
strm->msg = (char *)"incorrect length check";
1212+
strm->msg = (z_const char *)"incorrect length check";
12131213
state->mode = BAD;
12141214
break;
12151215
}

0 commit comments

Comments
 (0)