| Index: third_party/zlib/infback.c
 | 
| ===================================================================
 | 
| --- third_party/zlib/infback.c	(revision 113739)
 | 
| +++ third_party/zlib/infback.c	(working copy)
 | 
| @@ -1,5 +1,5 @@
 | 
|  /* infback.c -- inflate using a call-back interface
 | 
| - * Copyright (C) 1995-2005 Mark Adler
 | 
| + * Copyright (C) 1995-2009 Mark Adler
 | 
|   * For conditions of distribution and use, see copyright notice in zlib.h
 | 
|   */
 | 
|  
 | 
| @@ -55,7 +55,7 @@
 | 
|      state->wbits = windowBits;
 | 
|      state->wsize = 1U << windowBits;
 | 
|      state->window = window;
 | 
| -    state->write = 0;
 | 
| +    state->wnext = 0;
 | 
|      state->whave = 0;
 | 
|      return Z_OK;
 | 
|  }
 | 
| @@ -253,7 +253,7 @@
 | 
|      unsigned bits;              /* bits in bit buffer */
 | 
|      unsigned copy;              /* number of stored or match bytes to copy */
 | 
|      unsigned char FAR *from;    /* where to copy match bytes from */
 | 
| -    code this;                  /* current decoding table entry */
 | 
| +    code here;                  /* current decoding table entry */
 | 
|      code last;                  /* parent table entry */
 | 
|      unsigned len;               /* length to copy for repeats, bits to drop */
 | 
|      int ret;                    /* return code */
 | 
| @@ -389,19 +389,19 @@
 | 
|              state->have = 0;
 | 
|              while (state->have < state->nlen + state->ndist) {
 | 
|                  for (;;) {
 | 
| -                    this = state->lencode[BITS(state->lenbits)];
 | 
| -                    if ((unsigned)(this.bits) <= bits) break;
 | 
| +                    here = state->lencode[BITS(state->lenbits)];
 | 
| +                    if ((unsigned)(here.bits) <= bits) break;
 | 
|                      PULLBYTE();
 | 
|                  }
 | 
| -                if (this.val < 16) {
 | 
| -                    NEEDBITS(this.bits);
 | 
| -                    DROPBITS(this.bits);
 | 
| -                    state->lens[state->have++] = this.val;
 | 
| +                if (here.val < 16) {
 | 
| +                    NEEDBITS(here.bits);
 | 
| +                    DROPBITS(here.bits);
 | 
| +                    state->lens[state->have++] = here.val;
 | 
|                  }
 | 
|                  else {
 | 
| -                    if (this.val == 16) {
 | 
| -                        NEEDBITS(this.bits + 2);
 | 
| -                        DROPBITS(this.bits);
 | 
| +                    if (here.val == 16) {
 | 
| +                        NEEDBITS(here.bits + 2);
 | 
| +                        DROPBITS(here.bits);
 | 
|                          if (state->have == 0) {
 | 
|                              strm->msg = (char *)"invalid bit length repeat";
 | 
|                              state->mode = BAD;
 | 
| @@ -411,16 +411,16 @@
 | 
|                          copy = 3 + BITS(2);
 | 
|                          DROPBITS(2);
 | 
|                      }
 | 
| -                    else if (this.val == 17) {
 | 
| -                        NEEDBITS(this.bits + 3);
 | 
| -                        DROPBITS(this.bits);
 | 
| +                    else if (here.val == 17) {
 | 
| +                        NEEDBITS(here.bits + 3);
 | 
| +                        DROPBITS(here.bits);
 | 
|                          len = 0;
 | 
|                          copy = 3 + BITS(3);
 | 
|                          DROPBITS(3);
 | 
|                      }
 | 
|                      else {
 | 
| -                        NEEDBITS(this.bits + 7);
 | 
| -                        DROPBITS(this.bits);
 | 
| +                        NEEDBITS(here.bits + 7);
 | 
| +                        DROPBITS(here.bits);
 | 
|                          len = 0;
 | 
|                          copy = 11 + BITS(7);
 | 
|                          DROPBITS(7);
 | 
| @@ -438,7 +438,16 @@
 | 
|              /* handle error breaks in while */
 | 
|              if (state->mode == BAD) break;
 | 
|  
 | 
| -            /* build code tables */
 | 
| +            /* check for end-of-block code (better have one) */
 | 
| +            if (state->lens[256] == 0) {
 | 
| +                strm->msg = (char *)"invalid code -- missing end-of-block";
 | 
| +                state->mode = BAD;
 | 
| +                break;
 | 
| +            }
 | 
| +
 | 
| +            /* build code tables -- note: do not change the lenbits or distbits
 | 
| +               values here (9 and 6) without reading the comments in inftrees.h
 | 
| +               concerning the ENOUGH constants, which depend on those values */
 | 
|              state->next = state->codes;
 | 
|              state->lencode = (code const FAR *)(state->next);
 | 
|              state->lenbits = 9;
 | 
| @@ -474,28 +483,28 @@
 | 
|  
 | 
|              /* get a literal, length, or end-of-block code */
 | 
|              for (;;) {
 | 
| -                this = state->lencode[BITS(state->lenbits)];
 | 
| -                if ((unsigned)(this.bits) <= bits) break;
 | 
| +                here = state->lencode[BITS(state->lenbits)];
 | 
| +                if ((unsigned)(here.bits) <= bits) break;
 | 
|                  PULLBYTE();
 | 
|              }
 | 
| -            if (this.op && (this.op & 0xf0) == 0) {
 | 
| -                last = this;
 | 
| +            if (here.op && (here.op & 0xf0) == 0) {
 | 
| +                last = here;
 | 
|                  for (;;) {
 | 
| -                    this = state->lencode[last.val +
 | 
| +                    here = state->lencode[last.val +
 | 
|                              (BITS(last.bits + last.op) >> last.bits)];
 | 
| -                    if ((unsigned)(last.bits + this.bits) <= bits) break;
 | 
| +                    if ((unsigned)(last.bits + here.bits) <= bits) break;
 | 
|                      PULLBYTE();
 | 
|                  }
 | 
|                  DROPBITS(last.bits);
 | 
|              }
 | 
| -            DROPBITS(this.bits);
 | 
| -            state->length = (unsigned)this.val;
 | 
| +            DROPBITS(here.bits);
 | 
| +            state->length = (unsigned)here.val;
 | 
|  
 | 
|              /* process literal */
 | 
| -            if (this.op == 0) {
 | 
| -                Tracevv((stderr, this.val >= 0x20 && this.val < 0x7f ?
 | 
| +            if (here.op == 0) {
 | 
| +                Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
 | 
|                          "inflate:         literal '%c'\n" :
 | 
| -                        "inflate:         literal 0x%02x\n", this.val));
 | 
| +                        "inflate:         literal 0x%02x\n", here.val));
 | 
|                  ROOM();
 | 
|                  *put++ = (unsigned char)(state->length);
 | 
|                  left--;
 | 
| @@ -504,21 +513,21 @@
 | 
|              }
 | 
|  
 | 
|              /* process end of block */
 | 
| -            if (this.op & 32) {
 | 
| +            if (here.op & 32) {
 | 
|                  Tracevv((stderr, "inflate:         end of block\n"));
 | 
|                  state->mode = TYPE;
 | 
|                  break;
 | 
|              }
 | 
|  
 | 
|              /* invalid code */
 | 
| -            if (this.op & 64) {
 | 
| +            if (here.op & 64) {
 | 
|                  strm->msg = (char *)"invalid literal/length code";
 | 
|                  state->mode = BAD;
 | 
|                  break;
 | 
|              }
 | 
|  
 | 
|              /* length code -- get extra bits, if any */
 | 
| -            state->extra = (unsigned)(this.op) & 15;
 | 
| +            state->extra = (unsigned)(here.op) & 15;
 | 
|              if (state->extra != 0) {
 | 
|                  NEEDBITS(state->extra);
 | 
|                  state->length += BITS(state->extra);
 | 
| @@ -528,30 +537,30 @@
 | 
|  
 | 
|              /* get distance code */
 | 
|              for (;;) {
 | 
| -                this = state->distcode[BITS(state->distbits)];
 | 
| -                if ((unsigned)(this.bits) <= bits) break;
 | 
| +                here = state->distcode[BITS(state->distbits)];
 | 
| +                if ((unsigned)(here.bits) <= bits) break;
 | 
|                  PULLBYTE();
 | 
|              }
 | 
| -            if ((this.op & 0xf0) == 0) {
 | 
| -                last = this;
 | 
| +            if ((here.op & 0xf0) == 0) {
 | 
| +                last = here;
 | 
|                  for (;;) {
 | 
| -                    this = state->distcode[last.val +
 | 
| +                    here = state->distcode[last.val +
 | 
|                              (BITS(last.bits + last.op) >> last.bits)];
 | 
| -                    if ((unsigned)(last.bits + this.bits) <= bits) break;
 | 
| +                    if ((unsigned)(last.bits + here.bits) <= bits) break;
 | 
|                      PULLBYTE();
 | 
|                  }
 | 
|                  DROPBITS(last.bits);
 | 
|              }
 | 
| -            DROPBITS(this.bits);
 | 
| -            if (this.op & 64) {
 | 
| +            DROPBITS(here.bits);
 | 
| +            if (here.op & 64) {
 | 
|                  strm->msg = (char *)"invalid distance code";
 | 
|                  state->mode = BAD;
 | 
|                  break;
 | 
|              }
 | 
| -            state->offset = (unsigned)this.val;
 | 
| +            state->offset = (unsigned)here.val;
 | 
|  
 | 
|              /* get distance extra bits, if any */
 | 
| -            state->extra = (unsigned)(this.op) & 15;
 | 
| +            state->extra = (unsigned)(here.op) & 15;
 | 
|              if (state->extra != 0) {
 | 
|                  NEEDBITS(state->extra);
 | 
|                  state->offset += BITS(state->extra);
 | 
| 
 |