linux/lib/zlib_inflate/inflate.c
<<
>>
Prefs
   1/* inflate.c -- zlib decompression
   2 * Copyright (C) 1995-2005 Mark Adler
   3 * For conditions of distribution and use, see copyright notice in zlib.h
   4 *
   5 * Based on zlib 1.2.3 but modified for the Linux Kernel by
   6 * Richard Purdie <richard@openedhand.com>
   7 *
   8 * Changes mainly for static instead of dynamic memory allocation
   9 *
  10 */
  11
  12#include <linux/zutil.h>
  13#include "inftrees.h"
  14#include "inflate.h"
  15#include "inffast.h"
  16#include "infutil.h"
  17
  18int zlib_inflate_workspacesize(void)
  19{
  20    return sizeof(struct inflate_workspace);
  21}
  22
  23int zlib_inflateReset(z_streamp strm)
  24{
  25    struct inflate_state *state;
  26
  27    if (strm == NULL || strm->state == NULL) return Z_STREAM_ERROR;
  28    state = (struct inflate_state *)strm->state;
  29    strm->total_in = strm->total_out = state->total = 0;
  30    strm->msg = NULL;
  31    strm->adler = 1;        /* to support ill-conceived Java test suite */
  32    state->mode = HEAD;
  33    state->last = 0;
  34    state->havedict = 0;
  35    state->dmax = 32768U;
  36    state->hold = 0;
  37    state->bits = 0;
  38    state->lencode = state->distcode = state->next = state->codes;
  39
  40    /* Initialise Window */
  41    state->wsize = 1U << state->wbits;
  42    state->write = 0;
  43    state->whave = 0;
  44
  45    return Z_OK;
  46}
  47
  48int zlib_inflateInit2(z_streamp strm, int windowBits)
  49{
  50    struct inflate_state *state;
  51
  52    if (strm == NULL) return Z_STREAM_ERROR;
  53    strm->msg = NULL;                 /* in case we return an error */
  54
  55    state = &WS(strm)->inflate_state;
  56    strm->state = (struct internal_state *)state;
  57
  58    if (windowBits < 0) {
  59        state->wrap = 0;
  60        windowBits = -windowBits;
  61    }
  62    else {
  63        state->wrap = (windowBits >> 4) + 1;
  64    }
  65    if (windowBits < 8 || windowBits > 15) {
  66        return Z_STREAM_ERROR;
  67    }
  68    state->wbits = (unsigned)windowBits;
  69    state->window = &WS(strm)->working_window[0];
  70
  71    return zlib_inflateReset(strm);
  72}
  73
  74/*
  75   Return state with length and distance decoding tables and index sizes set to
  76   fixed code decoding.  This returns fixed tables from inffixed.h.
  77 */
  78static void zlib_fixedtables(struct inflate_state *state)
  79{
  80#   include "inffixed.h"
  81    state->lencode = lenfix;
  82    state->lenbits = 9;
  83    state->distcode = distfix;
  84    state->distbits = 5;
  85}
  86
  87
  88/*
  89   Update the window with the last wsize (normally 32K) bytes written before
  90   returning. This is only called when a window is already in use, or when
  91   output has been written during this inflate call, but the end of the deflate
  92   stream has not been reached yet. It is also called to window dictionary data
  93   when a dictionary is loaded.
  94
  95   Providing output buffers larger than 32K to inflate() should provide a speed
  96   advantage, since only the last 32K of output is copied to the sliding window
  97   upon return from inflate(), and since all distances after the first 32K of
  98   output will fall in the output data, making match copies simpler and faster.
  99   The advantage may be dependent on the size of the processor's data caches.
 100 */
 101static void zlib_updatewindow(z_streamp strm, unsigned out)
 102{
 103    struct inflate_state *state;
 104    unsigned copy, dist;
 105
 106    state = (struct inflate_state *)strm->state;
 107
 108    /* copy state->wsize or less output bytes into the circular window */
 109    copy = out - strm->avail_out;
 110    if (copy >= state->wsize) {
 111        memcpy(state->window, strm->next_out - state->wsize, state->wsize);
 112        state->write = 0;
 113        state->whave = state->wsize;
 114    }
 115    else {
 116        dist = state->wsize - state->write;
 117        if (dist > copy) dist = copy;
 118        memcpy(state->window + state->write, strm->next_out - copy, dist);
 119        copy -= dist;
 120        if (copy) {
 121            memcpy(state->window, strm->next_out - copy, copy);
 122            state->write = copy;
 123            state->whave = state->wsize;
 124        }
 125        else {
 126            state->write += dist;
 127            if (state->write == state->wsize) state->write = 0;
 128            if (state->whave < state->wsize) state->whave += dist;
 129        }
 130    }
 131}
 132
 133
 134/*
 135 * At the end of a Deflate-compressed PPP packet, we expect to have seen
 136 * a `stored' block type value but not the (zero) length bytes.
 137 */
 138/*
 139   Returns true if inflate is currently at the end of a block generated by
 140   Z_SYNC_FLUSH or Z_FULL_FLUSH. This function is used by one PPP
 141   implementation to provide an additional safety check. PPP uses
 142   Z_SYNC_FLUSH but removes the length bytes of the resulting empty stored
 143   block. When decompressing, PPP checks that at the end of input packet,
 144   inflate is waiting for these length bytes.
 145 */
 146static int zlib_inflateSyncPacket(z_streamp strm)
 147{
 148    struct inflate_state *state;
 149
 150    if (strm == NULL || strm->state == NULL) return Z_STREAM_ERROR;
 151    state = (struct inflate_state *)strm->state;
 152
 153    if (state->mode == STORED && state->bits == 0) {
 154        state->mode = TYPE;
 155        return Z_OK;
 156    }
 157    return Z_DATA_ERROR;
 158}
 159
 160/* Macros for inflate(): */
 161
 162/* check function to use adler32() for zlib or crc32() for gzip */
 163#define UPDATE(check, buf, len) zlib_adler32(check, buf, len)
 164
 165/* Load registers with state in inflate() for speed */
 166#define LOAD() \
 167    do { \
 168        put = strm->next_out; \
 169        left = strm->avail_out; \
 170        next = strm->next_in; \
 171        have = strm->avail_in; \
 172        hold = state->hold; \
 173        bits = state->bits; \
 174    } while (0)
 175
 176/* Restore state from registers in inflate() */
 177#define RESTORE() \
 178    do { \
 179        strm->next_out = put; \
 180        strm->avail_out = left; \
 181        strm->next_in = next; \
 182        strm->avail_in = have; \
 183        state->hold = hold; \
 184        state->bits = bits; \
 185    } while (0)
 186
 187/* Clear the input bit accumulator */
 188#define INITBITS() \
 189    do { \
 190        hold = 0; \
 191        bits = 0; \
 192    } while (0)
 193
 194/* Get a byte of input into the bit accumulator, or return from inflate()
 195   if there is no input available. */
 196#define PULLBYTE() \
 197    do { \
 198        if (have == 0) goto inf_leave; \
 199        have--; \
 200        hold += (unsigned long)(*next++) << bits; \
 201        bits += 8; \
 202    } while (0)
 203
 204/* Assure that there are at least n bits in the bit accumulator.  If there is
 205   not enough available input to do that, then return from inflate(). */
 206#define NEEDBITS(n) \
 207    do { \
 208        while (bits < (unsigned)(n)) \
 209            PULLBYTE(); \
 210    } while (0)
 211
 212/* Return the low n bits of the bit accumulator (n < 16) */
 213#define BITS(n) \
 214    ((unsigned)hold & ((1U << (n)) - 1))
 215
 216/* Remove n bits from the bit accumulator */
 217#define DROPBITS(n) \
 218    do { \
 219        hold >>= (n); \
 220        bits -= (unsigned)(n); \
 221    } while (0)
 222
 223/* Remove zero to seven bits as needed to go to a byte boundary */
 224#define BYTEBITS() \
 225    do { \
 226        hold >>= bits & 7; \
 227        bits -= bits & 7; \
 228    } while (0)
 229
 230/* Reverse the bytes in a 32-bit value */
 231#define REVERSE(q) \
 232    ((((q) >> 24) & 0xff) + (((q) >> 8) & 0xff00) + \
 233     (((q) & 0xff00) << 8) + (((q) & 0xff) << 24))
 234
 235/*
 236   inflate() uses a state machine to process as much input data and generate as
 237   much output data as possible before returning.  The state machine is
 238   structured roughly as follows:
 239
 240    for (;;) switch (state) {
 241    ...
 242    case STATEn:
 243        if (not enough input data or output space to make progress)
 244            return;
 245        ... make progress ...
 246        state = STATEm;
 247        break;
 248    ...
 249    }
 250
 251   so when inflate() is called again, the same case is attempted again, and
 252   if the appropriate resources are provided, the machine proceeds to the
 253   next state.  The NEEDBITS() macro is usually the way the state evaluates
 254   whether it can proceed or should return.  NEEDBITS() does the return if
 255   the requested bits are not available.  The typical use of the BITS macros
 256   is:
 257
 258        NEEDBITS(n);
 259        ... do something with BITS(n) ...
 260        DROPBITS(n);
 261
 262   where NEEDBITS(n) either returns from inflate() if there isn't enough
 263   input left to load n bits into the accumulator, or it continues.  BITS(n)
 264   gives the low n bits in the accumulator.  When done, DROPBITS(n) drops
 265   the low n bits off the accumulator.  INITBITS() clears the accumulator
 266   and sets the number of available bits to zero.  BYTEBITS() discards just
 267   enough bits to put the accumulator on a byte boundary.  After BYTEBITS()
 268   and a NEEDBITS(8), then BITS(8) would return the next byte in the stream.
 269
 270   NEEDBITS(n) uses PULLBYTE() to get an available byte of input, or to return
 271   if there is no input available.  The decoding of variable length codes uses
 272   PULLBYTE() directly in order to pull just enough bytes to decode the next
 273   code, and no more.
 274
 275   Some states loop until they get enough input, making sure that enough
 276   state information is maintained to continue the loop where it left off
 277   if NEEDBITS() returns in the loop.  For example, want, need, and keep
 278   would all have to actually be part of the saved state in case NEEDBITS()
 279   returns:
 280
 281    case STATEw:
 282        while (want < need) {
 283            NEEDBITS(n);
 284            keep[want++] = BITS(n);
 285            DROPBITS(n);
 286        }
 287        state = STATEx;
 288    case STATEx:
 289
 290   As shown above, if the next state is also the next case, then the break
 291   is omitted.
 292
 293   A state may also return if there is not enough output space available to
 294   complete that state.  Those states are copying stored data, writing a
 295   literal byte, and copying a matching string.
 296
 297   When returning, a "goto inf_leave" is used to update the total counters,
 298   update the check value, and determine whether any progress has been made
 299   during that inflate() call in order to return the proper return code.
 300   Progress is defined as a change in either strm->avail_in or strm->avail_out.
 301   When there is a window, goto inf_leave will update the window with the last
 302   output written.  If a goto inf_leave occurs in the middle of decompression
 303   and there is no window currently, goto inf_leave will create one and copy
 304   output to the window for the next call of inflate().
 305
 306   In this implementation, the flush parameter of inflate() only affects the
 307   return code (per zlib.h).  inflate() always writes as much as possible to
 308   strm->next_out, given the space available and the provided input--the effect
 309   documented in zlib.h of Z_SYNC_FLUSH.  Furthermore, inflate() always defers
 310   the allocation of and copying into a sliding window until necessary, which
 311   provides the effect documented in zlib.h for Z_FINISH when the entire input
 312   stream available.  So the only thing the flush parameter actually does is:
 313   when flush is set to Z_FINISH, inflate() cannot return Z_OK.  Instead it
 314   will return Z_BUF_ERROR if it has not reached the end of the stream.
 315 */
 316
 317int zlib_inflate(z_streamp strm, int flush)
 318{
 319    struct inflate_state *state;
 320    const unsigned char *next;  /* next input */
 321    unsigned char *put;         /* next output */
 322    unsigned have, left;        /* available input and output */
 323    unsigned long hold;         /* bit buffer */
 324    unsigned bits;              /* bits in bit buffer */
 325    unsigned in, out;           /* save starting available input and output */
 326    unsigned copy;              /* number of stored or match bytes to copy */
 327    unsigned char *from;        /* where to copy match bytes from */
 328    code this;                  /* current decoding table entry */
 329    code last;                  /* parent table entry */
 330    unsigned len;               /* length to copy for repeats, bits to drop */
 331    int ret;                    /* return code */
 332    static const unsigned short order[19] = /* permutation of code lengths */
 333        {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};
 334
 335    /* Do not check for strm->next_out == NULL here as ppc zImage
 336       inflates to strm->next_out = 0 */
 337
 338    if (strm == NULL || strm->state == NULL ||
 339        (strm->next_in == NULL && strm->avail_in != 0))
 340        return Z_STREAM_ERROR;
 341
 342    state = (struct inflate_state *)strm->state;
 343
 344    if (state->mode == TYPE) state->mode = TYPEDO;      /* skip check */
 345    LOAD();
 346    in = have;
 347    out = left;
 348    ret = Z_OK;
 349    for (;;)
 350        switch (state->mode) {
 351        case HEAD:
 352            if (state->wrap == 0) {
 353                state->mode = TYPEDO;
 354                break;
 355            }
 356            NEEDBITS(16);
 357            if (
 358                ((BITS(8) << 8) + (hold >> 8)) % 31) {
 359                strm->msg = (char *)"incorrect header check";
 360                state->mode = BAD;
 361                break;
 362            }
 363            if (BITS(4) != Z_DEFLATED) {
 364                strm->msg = (char *)"unknown compression method";
 365                state->mode = BAD;
 366                break;
 367            }
 368            DROPBITS(4);
 369            len = BITS(4) + 8;
 370            if (len > state->wbits) {
 371                strm->msg = (char *)"invalid window size";
 372                state->mode = BAD;
 373                break;
 374            }
 375            state->dmax = 1U << len;
 376            strm->adler = state->check = zlib_adler32(0L, NULL, 0);
 377            state->mode = hold & 0x200 ? DICTID : TYPE;
 378            INITBITS();
 379            break;
 380        case DICTID:
 381            NEEDBITS(32);
 382            strm->adler = state->check = REVERSE(hold);
 383            INITBITS();
 384            state->mode = DICT;
 385            /* fall through */
 386        case DICT:
 387            if (state->havedict == 0) {
 388                RESTORE();
 389                return Z_NEED_DICT;
 390            }
 391            strm->adler = state->check = zlib_adler32(0L, NULL, 0);
 392            state->mode = TYPE;
 393            /* fall through */
 394        case TYPE:
 395            if (flush == Z_BLOCK) goto inf_leave;
 396            /* fall through */
 397        case TYPEDO:
 398            if (state->last) {
 399                BYTEBITS();
 400                state->mode = CHECK;
 401                break;
 402            }
 403            NEEDBITS(3);
 404            state->last = BITS(1);
 405            DROPBITS(1);
 406            switch (BITS(2)) {
 407            case 0:                             /* stored block */
 408                state->mode = STORED;
 409                break;
 410            case 1:                             /* fixed block */
 411                zlib_fixedtables(state);
 412                state->mode = LEN;              /* decode codes */
 413                break;
 414            case 2:                             /* dynamic block */
 415                state->mode = TABLE;
 416                break;
 417            case 3:
 418                strm->msg = (char *)"invalid block type";
 419                state->mode = BAD;
 420            }
 421            DROPBITS(2);
 422            break;
 423        case STORED:
 424            BYTEBITS();                         /* go to byte boundary */
 425            NEEDBITS(32);
 426            if ((hold & 0xffff) != ((hold >> 16) ^ 0xffff)) {
 427                strm->msg = (char *)"invalid stored block lengths";
 428                state->mode = BAD;
 429                break;
 430            }
 431            state->length = (unsigned)hold & 0xffff;
 432            INITBITS();
 433            state->mode = COPY;
 434            /* fall through */
 435        case COPY:
 436            copy = state->length;
 437            if (copy) {
 438                if (copy > have) copy = have;
 439                if (copy > left) copy = left;
 440                if (copy == 0) goto inf_leave;
 441                memcpy(put, next, copy);
 442                have -= copy;
 443                next += copy;
 444                left -= copy;
 445                put += copy;
 446                state->length -= copy;
 447                break;
 448            }
 449            state->mode = TYPE;
 450            break;
 451        case TABLE:
 452            NEEDBITS(14);
 453            state->nlen = BITS(5) + 257;
 454            DROPBITS(5);
 455            state->ndist = BITS(5) + 1;
 456            DROPBITS(5);
 457            state->ncode = BITS(4) + 4;
 458            DROPBITS(4);
 459#ifndef PKZIP_BUG_WORKAROUND
 460            if (state->nlen > 286 || state->ndist > 30) {
 461                strm->msg = (char *)"too many length or distance symbols";
 462                state->mode = BAD;
 463                break;
 464            }
 465#endif
 466            state->have = 0;
 467            state->mode = LENLENS;
 468            /* fall through */
 469        case LENLENS:
 470            while (state->have < state->ncode) {
 471                NEEDBITS(3);
 472                state->lens[order[state->have++]] = (unsigned short)BITS(3);
 473                DROPBITS(3);
 474            }
 475            while (state->have < 19)
 476                state->lens[order[state->have++]] = 0;
 477            state->next = state->codes;
 478            state->lencode = (code const *)(state->next);
 479            state->lenbits = 7;
 480            ret = zlib_inflate_table(CODES, state->lens, 19, &(state->next),
 481                                &(state->lenbits), state->work);
 482            if (ret) {
 483                strm->msg = (char *)"invalid code lengths set";
 484                state->mode = BAD;
 485                break;
 486            }
 487            state->have = 0;
 488            state->mode = CODELENS;
 489            /* fall through */
 490        case CODELENS:
 491            while (state->have < state->nlen + state->ndist) {
 492                for (;;) {
 493                    this = state->lencode[BITS(state->lenbits)];
 494                    if ((unsigned)(this.bits) <= bits) break;
 495                    PULLBYTE();
 496                }
 497                if (this.val < 16) {
 498                    NEEDBITS(this.bits);
 499                    DROPBITS(this.bits);
 500                    state->lens[state->have++] = this.val;
 501                }
 502                else {
 503                    if (this.val == 16) {
 504                        NEEDBITS(this.bits + 2);
 505                        DROPBITS(this.bits);
 506                        if (state->have == 0) {
 507                            strm->msg = (char *)"invalid bit length repeat";
 508                            state->mode = BAD;
 509                            break;
 510                        }
 511                        len = state->lens[state->have - 1];
 512                        copy = 3 + BITS(2);
 513                        DROPBITS(2);
 514                    }
 515                    else if (this.val == 17) {
 516                        NEEDBITS(this.bits + 3);
 517                        DROPBITS(this.bits);
 518                        len = 0;
 519                        copy = 3 + BITS(3);
 520                        DROPBITS(3);
 521                    }
 522                    else {
 523                        NEEDBITS(this.bits + 7);
 524                        DROPBITS(this.bits);
 525                        len = 0;
 526                        copy = 11 + BITS(7);
 527                        DROPBITS(7);
 528                    }
 529                    if (state->have + copy > state->nlen + state->ndist) {
 530                        strm->msg = (char *)"invalid bit length repeat";
 531                        state->mode = BAD;
 532                        break;
 533                    }
 534                    while (copy--)
 535                        state->lens[state->have++] = (unsigned short)len;
 536                }
 537            }
 538
 539            /* handle error breaks in while */
 540            if (state->mode == BAD) break;
 541
 542            /* build code tables */
 543            state->next = state->codes;
 544            state->lencode = (code const *)(state->next);
 545            state->lenbits = 9;
 546            ret = zlib_inflate_table(LENS, state->lens, state->nlen, &(state->next),
 547                                &(state->lenbits), state->work);
 548            if (ret) {
 549                strm->msg = (char *)"invalid literal/lengths set";
 550                state->mode = BAD;
 551                break;
 552            }
 553            state->distcode = (code const *)(state->next);
 554            state->distbits = 6;
 555            ret = zlib_inflate_table(DISTS, state->lens + state->nlen, state->ndist,
 556                            &(state->next), &(state->distbits), state->work);
 557            if (ret) {
 558                strm->msg = (char *)"invalid distances set";
 559                state->mode = BAD;
 560                break;
 561            }
 562            state->mode = LEN;
 563            /* fall through */
 564        case LEN:
 565            if (have >= 6 && left >= 258) {
 566                RESTORE();
 567                inflate_fast(strm, out);
 568                LOAD();
 569                break;
 570            }
 571            for (;;) {
 572                this = state->lencode[BITS(state->lenbits)];
 573                if ((unsigned)(this.bits) <= bits) break;
 574                PULLBYTE();
 575            }
 576            if (this.op && (this.op & 0xf0) == 0) {
 577                last = this;
 578                for (;;) {
 579                    this = state->lencode[last.val +
 580                            (BITS(last.bits + last.op) >> last.bits)];
 581                    if ((unsigned)(last.bits + this.bits) <= bits) break;
 582                    PULLBYTE();
 583                }
 584                DROPBITS(last.bits);
 585            }
 586            DROPBITS(this.bits);
 587            state->length = (unsigned)this.val;
 588            if ((int)(this.op) == 0) {
 589                state->mode = LIT;
 590                break;
 591            }
 592            if (this.op & 32) {
 593                state->mode = TYPE;
 594                break;
 595            }
 596            if (this.op & 64) {
 597                strm->msg = (char *)"invalid literal/length code";
 598                state->mode = BAD;
 599                break;
 600            }
 601            state->extra = (unsigned)(this.op) & 15;
 602            state->mode = LENEXT;
 603            /* fall through */
 604        case LENEXT:
 605            if (state->extra) {
 606                NEEDBITS(state->extra);
 607                state->length += BITS(state->extra);
 608                DROPBITS(state->extra);
 609            }
 610            state->mode = DIST;
 611            /* fall through */
 612        case DIST:
 613            for (;;) {
 614                this = state->distcode[BITS(state->distbits)];
 615                if ((unsigned)(this.bits) <= bits) break;
 616                PULLBYTE();
 617            }
 618            if ((this.op & 0xf0) == 0) {
 619                last = this;
 620                for (;;) {
 621                    this = state->distcode[last.val +
 622                            (BITS(last.bits + last.op) >> last.bits)];
 623                    if ((unsigned)(last.bits + this.bits) <= bits) break;
 624                    PULLBYTE();
 625                }
 626                DROPBITS(last.bits);
 627            }
 628            DROPBITS(this.bits);
 629            if (this.op & 64) {
 630                strm->msg = (char *)"invalid distance code";
 631                state->mode = BAD;
 632                break;
 633            }
 634            state->offset = (unsigned)this.val;
 635            state->extra = (unsigned)(this.op) & 15;
 636            state->mode = DISTEXT;
 637            /* fall through */
 638        case DISTEXT:
 639            if (state->extra) {
 640                NEEDBITS(state->extra);
 641                state->offset += BITS(state->extra);
 642                DROPBITS(state->extra);
 643            }
 644#ifdef INFLATE_STRICT
 645            if (state->offset > state->dmax) {
 646                strm->msg = (char *)"invalid distance too far back";
 647                state->mode = BAD;
 648                break;
 649            }
 650#endif
 651            if (state->offset > state->whave + out - left) {
 652                strm->msg = (char *)"invalid distance too far back";
 653                state->mode = BAD;
 654                break;
 655            }
 656            state->mode = MATCH;
 657            /* fall through */
 658        case MATCH:
 659            if (left == 0) goto inf_leave;
 660            copy = out - left;
 661            if (state->offset > copy) {         /* copy from window */
 662                copy = state->offset - copy;
 663                if (copy > state->write) {
 664                    copy -= state->write;
 665                    from = state->window + (state->wsize - copy);
 666                }
 667                else
 668                    from = state->window + (state->write - copy);
 669                if (copy > state->length) copy = state->length;
 670            }
 671            else {                              /* copy from output */
 672                from = put - state->offset;
 673                copy = state->length;
 674            }
 675            if (copy > left) copy = left;
 676            left -= copy;
 677            state->length -= copy;
 678            do {
 679                *put++ = *from++;
 680            } while (--copy);
 681            if (state->length == 0) state->mode = LEN;
 682            break;
 683        case LIT:
 684            if (left == 0) goto inf_leave;
 685            *put++ = (unsigned char)(state->length);
 686            left--;
 687            state->mode = LEN;
 688            break;
 689        case CHECK:
 690            if (state->wrap) {
 691                NEEDBITS(32);
 692                out -= left;
 693                strm->total_out += out;
 694                state->total += out;
 695                if (out)
 696                    strm->adler = state->check =
 697                        UPDATE(state->check, put - out, out);
 698                out = left;
 699                if ((
 700                     REVERSE(hold)) != state->check) {
 701                    strm->msg = (char *)"incorrect data check";
 702                    state->mode = BAD;
 703                    break;
 704                }
 705                INITBITS();
 706            }
 707            state->mode = DONE;
 708            /* fall through */
 709        case DONE:
 710            ret = Z_STREAM_END;
 711            goto inf_leave;
 712        case BAD:
 713            ret = Z_DATA_ERROR;
 714            goto inf_leave;
 715        case MEM:
 716            return Z_MEM_ERROR;
 717        case SYNC:
 718        default:
 719            return Z_STREAM_ERROR;
 720        }
 721
 722    /*
 723       Return from inflate(), updating the total counts and the check value.
 724       If there was no progress during the inflate() call, return a buffer
 725       error.  Call zlib_updatewindow() to create and/or update the window state.
 726     */
 727  inf_leave:
 728    RESTORE();
 729    if (state->wsize || (state->mode < CHECK && out != strm->avail_out))
 730        zlib_updatewindow(strm, out);
 731
 732    in -= strm->avail_in;
 733    out -= strm->avail_out;
 734    strm->total_in += in;
 735    strm->total_out += out;
 736    state->total += out;
 737    if (state->wrap && out)
 738        strm->adler = state->check =
 739            UPDATE(state->check, strm->next_out - out, out);
 740
 741    strm->data_type = state->bits + (state->last ? 64 : 0) +
 742                      (state->mode == TYPE ? 128 : 0);
 743
 744    if (flush == Z_PACKET_FLUSH && ret == Z_OK &&
 745            strm->avail_out != 0 && strm->avail_in == 0)
 746                return zlib_inflateSyncPacket(strm);
 747
 748    if (((in == 0 && out == 0) || flush == Z_FINISH) && ret == Z_OK)
 749        ret = Z_BUF_ERROR;
 750
 751    return ret;
 752}
 753
 754int zlib_inflateEnd(z_streamp strm)
 755{
 756    if (strm == NULL || strm->state == NULL)
 757        return Z_STREAM_ERROR;
 758    return Z_OK;
 759}
 760
 761/*
 762 * This subroutine adds the data at next_in/avail_in to the output history
 763 * without performing any output.  The output buffer must be "caught up";
 764 * i.e. no pending output but this should always be the case. The state must
 765 * be waiting on the start of a block (i.e. mode == TYPE or HEAD).  On exit,
 766 * the output will also be caught up, and the checksum will have been updated
 767 * if need be.
 768 */
 769int zlib_inflateIncomp(z_stream *z)
 770{
 771    struct inflate_state *state = (struct inflate_state *)z->state;
 772    Byte *saved_no = z->next_out;
 773    uInt saved_ao = z->avail_out;
 774
 775    if (state->mode != TYPE && state->mode != HEAD)
 776        return Z_DATA_ERROR;
 777
 778    /* Setup some variables to allow misuse of updateWindow */
 779    z->avail_out = 0;
 780    z->next_out = (unsigned char*)z->next_in + z->avail_in;
 781
 782    zlib_updatewindow(z, z->avail_in);
 783
 784    /* Restore saved variables */
 785    z->avail_out = saved_ao;
 786    z->next_out = saved_no;
 787
 788    z->adler = state->check =
 789        UPDATE(state->check, z->next_in, z->avail_in);
 790
 791    z->total_out += z->avail_in;
 792    z->total_in += z->avail_in;
 793    z->next_in += z->avail_in;
 794    state->total += z->avail_in;
 795    z->avail_in = 0;
 796
 797    return Z_OK;
 798}
 799