summaryrefslogtreecommitdiff
path: root/lib/libz
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libz')
-rw-r--r--lib/libz/infback.c14
-rw-r--r--lib/libz/inffast.c14
-rw-r--r--lib/libz/inflate.c78
3 files changed, 104 insertions, 2 deletions
diff --git a/lib/libz/infback.c b/lib/libz/infback.c
index 110b03b857f..9496e675c7e 100644
--- a/lib/libz/infback.c
+++ b/lib/libz/infback.c
@@ -307,7 +307,11 @@ void FAR *out_desc;
state->mode = TABLE;
break;
case 3:
+#ifdef SMALL
+ strm->msg = "error";
+#else
strm->msg = (char *)"invalid block type";
+#endif
state->mode = BAD;
}
DROPBITS(2);
@@ -318,7 +322,11 @@ void FAR *out_desc;
BYTEBITS(); /* go to byte boundary */
NEEDBITS(32);
if ((hold & 0xffff) != ((hold >> 16) ^ 0xffff)) {
+#ifdef SMALL
+ strm->msg = "error";
+#else
strm->msg = (char *)"invalid stored block lengths";
+#endif
state->mode = BAD;
break;
}
@@ -356,7 +364,11 @@ void FAR *out_desc;
DROPBITS(4);
#ifndef PKZIP_BUG_WORKAROUND
if (state->nlen > 286 || state->ndist > 30) {
+#ifdef SMALL
+ strm->msg = "error";
+#else
strm->msg = (char *)"too many length or distance symbols";
+#endif
state->mode = BAD;
break;
}
@@ -458,6 +470,7 @@ void FAR *out_desc;
state->mode = LEN;
case LEN:
+#ifndef SLOW
/* use inflate_fast() if we have enough input and output */
if (have >= 6 && left >= 258) {
RESTORE();
@@ -467,6 +480,7 @@ void FAR *out_desc;
LOAD();
break;
}
+#endif
/* get a literal, length, or end-of-block code */
for (;;) {
diff --git a/lib/libz/inffast.c b/lib/libz/inffast.c
index 137d8b14d3b..33b9feb54b7 100644
--- a/lib/libz/inffast.c
+++ b/lib/libz/inffast.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: inffast.c,v 1.4 2003/12/16 22:33:02 henning Exp $ */
+/* $OpenBSD: inffast.c,v 1.5 2003/12/17 00:28:19 millert Exp $ */
/* inffast.c -- fast decoding
* Copyright (C) 1995-2003 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
@@ -175,7 +175,11 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */
if (dist > op) { /* see if copy from window */
op = dist - op; /* distance back in window */
if (op > whave) {
+#ifdef SMALL
+ strm->msg = "error";
+#else
strm->msg = (char *)"invalid distance too far back";
+#endif
state->mode = BAD;
break;
}
@@ -251,7 +255,11 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */
goto dodist;
}
else {
+#ifdef SMALL
+ strm->msg = "error";
+#else
strm->msg = (char *)"invalid distance code";
+#endif
state->mode = BAD;
break;
}
@@ -266,7 +274,11 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */
break;
}
else {
+#ifdef SMALL
+ strm->msg = "error";
+#else
strm->msg = (char *)"invalid literal/length code";
+#endif
state->mode = BAD;
break;
}
diff --git a/lib/libz/inflate.c b/lib/libz/inflate.c
index adf7f2d6f91..27f87a69c95 100644
--- a/lib/libz/inflate.c
+++ b/lib/libz/inflate.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: inflate.c,v 1.5 2003/12/17 00:24:47 henning Exp $ */
+/* $OpenBSD: inflate.c,v 1.6 2003/12/17 00:28:19 millert Exp $ */
/* inflate.c -- zlib decompression
* Copyright (C) 1995-2003 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
@@ -587,18 +587,30 @@ int flush;
if (
#endif
((BITS(8) << 8) + (hold >> 8)) % 31) {
+#ifdef SMALL
+ strm->msg = "error";
+#else
strm->msg = (char *)"incorrect header check";
+#endif
state->mode = BAD;
break;
}
if (BITS(4) != Z_DEFLATED) {
+#ifdef SMALL
+ strm->msg = "error";
+#else
strm->msg = (char *)"unknown compression method";
+#endif
state->mode = BAD;
break;
}
DROPBITS(4);
if (BITS(4) + 8 > state->wbits) {
+#ifdef SMALL
+ strm->msg = "error";
+#else
strm->msg = (char *)"invalid window size";
+#endif
state->mode = BAD;
break;
}
@@ -612,12 +624,20 @@ int flush;
NEEDBITS(16);
state->flags = (int)(hold);
if ((state->flags & 0xff) != Z_DEFLATED) {
+#ifdef SMALL
+ strm->msg = "error";
+#else
strm->msg = (char *)"unknown compression method";
+#endif
state->mode = BAD;
break;
}
if (state->flags & 0xe000) {
+#ifdef SMALL
+ strm->msg = "error";
+#else
strm->msg = (char *)"unknown header flags set";
+#endif
state->mode = BAD;
break;
}
@@ -688,7 +708,11 @@ int flush;
if (state->flags & 0x0200) {
NEEDBITS(16);
if (hold != (state->check & 0xffff)) {
+#ifdef SMALL
+ strm->msg = "error";
+#else
strm->msg = (char *)"header crc mismatch";
+#endif
state->mode = BAD;
break;
}
@@ -739,7 +763,11 @@ int flush;
state->mode = TABLE;
break;
case 3:
+#ifdef SMALL
+ strm->msg = "error";
+#else
strm->msg = (char *)"invalid block type";
+#endif
state->mode = BAD;
}
DROPBITS(2);
@@ -748,7 +776,11 @@ int flush;
BYTEBITS(); /* go to byte boundary */
NEEDBITS(32);
if ((hold & 0xffff) != ((hold >> 16) ^ 0xffff)) {
+#ifdef SMALL
+ strm->msg = "error";
+#else
strm->msg = (char *)"invalid stored block lengths";
+#endif
state->mode = BAD;
break;
}
@@ -784,7 +816,11 @@ int flush;
DROPBITS(4);
#ifndef PKZIP_BUG_WORKAROUND
if (state->nlen > 286 || state->ndist > 30) {
+#ifdef SMALL
+ strm->msg = "error";
+#else
strm->msg = (char *)"too many length or distance symbols";
+#endif
state->mode = BAD;
break;
}
@@ -806,7 +842,11 @@ int flush;
ret = inflate_table(CODES, state->lens, 19, &(state->next),
&(state->lenbits), state->work);
if (ret) {
+#ifdef SMALL
+ strm->msg = "error";
+#else
strm->msg = (char *)"invalid code lengths set";
+#endif
state->mode = BAD;
break;
}
@@ -830,7 +870,11 @@ int flush;
NEEDBITS(this.bits + 2);
DROPBITS(this.bits);
if (state->have == 0) {
+#ifdef SMALL
+ strm->msg = "error";
+#else
strm->msg = (char *)"invalid bit length repeat";
+#endif
state->mode = BAD;
break;
}
@@ -853,7 +897,11 @@ int flush;
DROPBITS(7);
}
if (state->have + copy > state->nlen + state->ndist) {
+#ifdef SMALL
+ strm->msg = "error";
+#else
strm->msg = (char *)"invalid bit length repeat";
+#endif
state->mode = BAD;
break;
}
@@ -869,7 +917,11 @@ int flush;
ret = inflate_table(LENS, state->lens, state->nlen, &(state->next),
&(state->lenbits), state->work);
if (ret) {
+#ifdef SMALL
+ strm->msg = "error";
+#else
strm->msg = (char *)"invalid literal/lengths set";
+#endif
state->mode = BAD;
break;
}
@@ -878,7 +930,11 @@ int flush;
ret = inflate_table(DISTS, state->lens + state->nlen, state->ndist,
&(state->next), &(state->distbits), state->work);
if (ret) {
+#ifdef SMALL
+ strm->msg = "error";
+#else
strm->msg = (char *)"invalid distances set";
+#endif
state->mode = BAD;
break;
}
@@ -923,7 +979,11 @@ int flush;
break;
}
if (this.op & 64) {
+#ifdef SMALL
+ strm->msg = "error";
+#else
strm->msg = (char *)"invalid literal/length code";
+#endif
state->mode = BAD;
break;
}
@@ -955,7 +1015,11 @@ int flush;
}
DROPBITS(this.bits);
if (this.op & 64) {
+#ifdef SMALL
+ strm->msg = "error";
+#else
strm->msg = (char *)"invalid distance code";
+#endif
state->mode = BAD;
break;
}
@@ -969,7 +1033,11 @@ int flush;
DROPBITS(state->extra);
}
if (state->offset > state->whave + out - left) {
+#ifdef SMALL
+ strm->msg = "error";
+#else
strm->msg = (char *)"invalid distance too far back";
+#endif
state->mode = BAD;
break;
}
@@ -1021,7 +1089,11 @@ int flush;
state->flags ? hold :
#endif
REVERSE(hold)) != state->check) {
+#ifdef SMALL
+ strm->msg = "error";
+#else
strm->msg = (char *)"incorrect data check";
+#endif
state->mode = BAD;
break;
}
@@ -1034,7 +1106,11 @@ int flush;
if (state->wrap && state->flags) {
NEEDBITS(32);
if (hold != (state->total & 0xffffffffUL)) {
+#ifdef SMALL
+ strm->msg = "error";
+#else
strm->msg = (char *)"incorrect length check";
+#endif
state->mode = BAD;
break;
}