diff options
author | Mark Adler <madler@alumni.caltech.edu> | 2011-09-09 23:22:37 -0700 |
---|---|---|
committer | Mark Adler <madler@alumni.caltech.edu> | 2011-09-09 23:22:37 -0700 |
commit | 4b5a43a219d51066c01ff2ab86af18b967f2d0dd (patch) | |
tree | 4dcaf0cd18751d04cf638a9a6ec521990d4f2e90 /inffast.c | |
parent | 086e982175da84b3db958191031380794315f95f (diff) | |
download | zlib-4b5a43a219d51066c01ff2ab86af18b967f2d0dd.tar.gz |
zlib 1.2.0.5v1.2.0.5
Diffstat (limited to 'inffast.c')
-rw-r--r-- | inffast.c | 10 |
1 files changed, 8 insertions, 2 deletions
@@ -8,6 +8,8 @@ #include "inflate.h" #include "inffast.h" +#ifndef ASMINF + /* Allow machine dependent optimization for post-increment or pre-increment. Based on testing to date, Pre-increment preferred for: @@ -72,6 +74,7 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */ unsigned char FAR *beg; /* inflate()'s initial strm->next_out */ unsigned char FAR *end; /* while out < end, enough space available */ unsigned wsize; /* window size or zero if not using window */ + unsigned whave; /* valid bytes in the window */ unsigned write; /* window write index */ unsigned char FAR *window; /* allocated sliding window, if wsize != 0 */ unsigned long hold; /* local strm->hold */ @@ -95,6 +98,7 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */ beg = out - (start - strm->avail_out); end = out + (strm->avail_out - 257); wsize = state->wsize; + whave = state->whave; write = state->write; window = state->window; hold = state->hold; @@ -167,13 +171,13 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */ Tracevv((stderr, "inflate: distance %u\n", dist)); op = (unsigned)(out - beg); /* max distance in output */ if (dist > op) { /* see if copy from window */ - if (dist > wsize) { + op = dist - op; /* distance back in window */ + if (op > whave) { strm->msg = (char *)"invalid distance too far back"; state->mode = BAD; break; } from = window - OFF; - op = dist - op; /* distance back in window */ if (write == 0) { /* very common case */ from += wsize - op; if (op < len) { /* some from window */ @@ -296,3 +300,5 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */ - Larger unrolled copy loops (three is about right) - Moving len -= 3 statement into middle of loop */ + +#endif /* !ASMINF */ |