ReactOS  0.4.15-dev-5488-ge316d61
inflate.c File Reference
#include "zutil.h"
#include "inftrees.h"
#include "inflate.h"
#include "inffast.h"
#include "inffixed.h"
Include dependency graph for inflate.c:

Go to the source code of this file.

Macros

#define UPDATE_CHECK(check, buf, len)   (state->flags ? crc32(check, buf, len) : adler32(check, buf, len))
 
#define CRC2(check, word)
 
#define CRC4(check, word)
 
#define LOAD()
 
#define RESTORE()
 
#define INITBITS()
 
#define PULLBYTE()
 
#define NEEDBITS(n)
 
#define BITS(n)   ((unsigned)hold & ((1U << (n)) - 1))
 
#define DROPBITS(n)
 
#define BYTEBITS()
 

Functions

int inflateStateCheck OF ((z_streamp strm))
 
void fixedtables OF ((struct inflate_state FAR *state))
 
int updatewindow OF ((z_streamp strm, const unsigned char FAR *end, unsigned copy))
 
unsigned syncsearch OF ((unsigned FAR *have, const unsigned char FAR *buf, unsigned len))
 
int inflateStateCheck (z_streamp strm)
 
int ZEXPORT inflateResetKeep (z_streamp strm)
 
int ZEXPORT inflateReset (z_streamp strm)
 
int ZEXPORT inflateReset2 (z_streamp strm, int windowBits)
 
int ZEXPORT inflateInit2_ (z_streamp strm, int windowBits, const char *version, int stream_size)
 
int ZEXPORT inflateInit_ (z_streamp strm, const char *version, int stream_size)
 
int ZEXPORT inflatePrime (z_streamp strm, int bits, int value)
 
void fixedtables (struct inflate_state FAR *state)
 
int updatewindow (z_streamp strm, const Bytef *end, unsigned copy)
 
int ZEXPORT inflate (z_streamp strm, int flush)
 
int ZEXPORT inflateEnd (z_streamp strm)
 
int ZEXPORT inflateGetDictionary (z_streamp strm, Bytef *dictionary, uInt *dictLength)
 
int ZEXPORT inflateSetDictionary (z_streamp strm, const Bytef *dictionary, uInt dictLength)
 
int ZEXPORT inflateGetHeader (z_streamp strm, gz_headerp head)
 
unsigned syncsearch (unsigned FAR *have, const unsigned char FAR *buf, unsigned len)
 
int ZEXPORT inflateSync (z_streamp strm)
 
int ZEXPORT inflateSyncPoint (z_streamp strm)
 
int ZEXPORT inflateCopy (z_streamp dest, z_streamp source)
 
int ZEXPORT inflateUndermine (z_streamp strm, int subvert)
 
int ZEXPORT inflateValidate (z_streamp strm, int check)
 
long ZEXPORT inflateMark (z_streamp strm)
 
unsigned long ZEXPORT inflateCodesUsed (z_streamp strm)
 

Macro Definition Documentation

◆ BITS

#define BITS (   n)    ((unsigned)hold & ((1U << (n)) - 1))

Definition at line 524 of file inflate.c.

◆ BYTEBITS

#define BYTEBITS ( )
Value:
do { \
hold >>= bits & 7; \
bits -= bits & 7; \
} while (0)
GLenum GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * bits
Definition: glext.h:10929

Definition at line 535 of file inflate.c.

◆ CRC2

#define CRC2 (   check,
  word 
)
Value:
do { \
hbuf[0] = (unsigned char)(word); \
hbuf[1] = (unsigned char)((word) >> 8); \
check = crc32(check, hbuf, 2); \
} while (0)
#define crc32(crc, buf, len)
Definition: inflate.c:1076
unsigned char
Definition: typeof.h:29
void check(CONTEXT *pContext)
Definition: NtContinue.c:77
const WCHAR * word
Definition: lex.c:36

Definition at line 459 of file inflate.c.

◆ CRC4

#define CRC4 (   check,
  word 
)
Value:
do { \
hbuf[0] = (unsigned char)(word); \
hbuf[1] = (unsigned char)((word) >> 8); \
hbuf[2] = (unsigned char)((word) >> 16); \
hbuf[3] = (unsigned char)((word) >> 24); \
check = crc32(check, hbuf, 4); \
} while (0)
#define crc32(crc, buf, len)
Definition: inflate.c:1076
unsigned char
Definition: typeof.h:29
void check(CONTEXT *pContext)
Definition: NtContinue.c:77
const WCHAR * word
Definition: lex.c:36

Definition at line 466 of file inflate.c.

◆ DROPBITS

#define DROPBITS (   n)
Value:
do { \
hold >>= (n); \
bits -= (unsigned)(n); \
} while (0)
GLdouble n
Definition: glext.h:7729
static unsigned(__cdecl *hash_bstr)(bstr_t s)

Definition at line 528 of file inflate.c.

◆ INITBITS

#define INITBITS ( )
Value:
do { \
hold = 0; \
bits = 0; \
} while (0)

Definition at line 499 of file inflate.c.

◆ LOAD

#define LOAD ( )
Value:
do { \
put = strm->next_out; \
left = strm->avail_out; \
next = strm->next_in; \
have = strm->avail_in; \
hold = state->hold; \
bits = state->bits; \
} while (0)
z_streamp strm
Definition: inflate.c:195
static int state
Definition: maze.c:121

Definition at line 477 of file inflate.c.

◆ NEEDBITS

#define NEEDBITS (   n)
Value:
do { \
while (bits < (unsigned)(n)) \
PULLBYTE(); \
} while (0)
GLdouble n
Definition: glext.h:7729
GLenum GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * bits
Definition: glext.h:10929

Definition at line 517 of file inflate.c.

◆ PULLBYTE

#define PULLBYTE ( )
Value:
do { \
if (have == 0) goto inf_leave; \
have--; \
hold += (unsigned long)(*next++) << bits; \
bits += 8; \
} while (0)
while(CdLookupNextInitialFileDirent(IrpContext, Fcb, FileContext))
unsigned have
Definition: inflate.c:229
GLenum GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * bits
Definition: glext.h:10929
unsigned long hold
Definition: inflate.c:213
static unsigned __int64 next
Definition: rand_nt.c:6

Definition at line 507 of file inflate.c.

◆ RESTORE

#define RESTORE ( )
Value:
do { \
strm->next_out = put; \
strm->avail_out = left; \
strm->next_in = next; \
strm->avail_in = have; \
state->hold = hold; \
state->bits = bits; \
} while (0)
unsigned have
Definition: inflate.c:229
GLenum GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * bits
Definition: glext.h:10929
#define put(ret, state, sp, n)
Definition: match.c:105
unsigned long hold
Definition: inflate.c:213
GLint left
Definition: glext.h:7726
static unsigned __int64 next
Definition: rand_nt.c:6

Definition at line 488 of file inflate.c.

◆ UPDATE_CHECK

#define UPDATE_CHECK (   check,
  buf,
  len 
)    (state->flags ? crc32(check, buf, len) : adler32(check, buf, len))

Definition at line 451 of file inflate.c.

Function Documentation

◆ fixedtables()

void fixedtables ( struct inflate_state FAR state)

Definition at line 279 of file inflate.c.

281 {
282 #ifdef BUILDFIXED
283  static int virgin = 1;
284  static code *lenfix, *distfix;
285  static code fixed[544];
286 
287  /* build fixed huffman tables if first call (may not be thread safe) */
288  if (virgin) {
289  unsigned sym, bits;
290  static code *next;
291 
292  /* literal/length table */
293  sym = 0;
294  while (sym < 144) state->lens[sym++] = 8;
295  while (sym < 256) state->lens[sym++] = 9;
296  while (sym < 280) state->lens[sym++] = 7;
297  while (sym < 288) state->lens[sym++] = 8;
298  next = fixed;
299  lenfix = next;
300  bits = 9;
301  inflate_table(LENS, state->lens, 288, &(next), &(bits), state->work);
302 
303  /* distance table */
304  sym = 0;
305  while (sym < 32) state->lens[sym++] = 5;
306  distfix = next;
307  bits = 5;
308  inflate_table(DISTS, state->lens, 32, &(next), &(bits), state->work);
309 
310  /* do this just once */
311  virgin = 0;
312  }
313 #else /* !BUILDFIXED */
314 # include "inffixed.h"
315 #endif /* BUILDFIXED */
316  state->lencode = lenfix;
317  state->lenbits = 9;
318  state->distcode = distfix;
319  state->distbits = 5;
320 }
Definition: inflate.c:152
static const code lenfix[512]
Definition: inffixed.h:10
GLenum GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * bits
Definition: glext.h:10929
ios_base &_STLP_CALL fixed(ios_base &__s)
Definition: _ios_base.h:332
Definition: inflate.c:153
static int state
Definition: maze.c:121
Definition: inflate.c:139
static const code distfix[32]
Definition: inffixed.h:87
static unsigned __int64 next
Definition: rand_nt.c:6
int ZLIB_INTERNAL inflate_table(codetype type, unsigned short FAR *lens, unsigned codes, code FAR *FAR *table, unsigned FAR *bits, unsigned short FAR *work)
Definition: inftrees.c:32

Referenced by inflate().

◆ inflate()

int ZEXPORT inflate ( z_streamp  strm,
int  flush 
)

Definition at line 623 of file inflate.c.

626 {
627  struct inflate_state FAR *state;
628  z_const unsigned char FAR *next; /* next input */
629  unsigned char FAR *put; /* next output */
630  unsigned have, left; /* available input and output */
631  unsigned long hold; /* bit buffer */
632  unsigned bits; /* bits in bit buffer */
633  unsigned in, out; /* save starting available input and output */
634  unsigned copy; /* number of stored or match bytes to copy */
635  unsigned char FAR *from; /* where to copy match bytes from */
636  code here; /* current decoding table entry */
637  code last; /* parent table entry */
638  unsigned len; /* length to copy for repeats, bits to drop */
639  int ret; /* return code */
640 #ifdef GUNZIP
641  unsigned char hbuf[4]; /* buffer for gzip header crc calculation */
642 #endif
643  static const unsigned short order[19] = /* permutation of code lengths */
644  {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};
645 
646  if (inflateStateCheck(strm) || strm->next_out == Z_NULL ||
647  (strm->next_in == Z_NULL && strm->avail_in != 0))
648  return Z_STREAM_ERROR;
649 
650  state = (struct inflate_state FAR *)strm->state;
651  if (state->mode == TYPE) state->mode = TYPEDO; /* skip check */
652  LOAD();
653  in = have;
654  out = left;
655  ret = Z_OK;
656  for (;;)
657  switch (state->mode) {
658  case HEAD:
659  if (state->wrap == 0) {
660  state->mode = TYPEDO;
661  break;
662  }
663  NEEDBITS(16);
664 #ifdef GUNZIP
665  if ((state->wrap & 2) && hold == 0x8b1f) { /* gzip header */
666  if (state->wbits == 0)
667  state->wbits = 15;
668  state->check = crc32(0L, Z_NULL, 0);
669  CRC2(state->check, hold);
670  INITBITS();
671  state->mode = FLAGS;
672  break;
673  }
674  if (state->head != Z_NULL)
675  state->head->done = -1;
676  if (!(state->wrap & 1) || /* check if zlib header allowed */
677 #else
678  if (
679 #endif
680  ((BITS(8) << 8) + (hold >> 8)) % 31) {
681  strm->msg = (char *)"incorrect header check";
682  state->mode = BAD;
683  break;
684  }
685  if (BITS(4) != Z_DEFLATED) {
686  strm->msg = (char *)"unknown compression method";
687  state->mode = BAD;
688  break;
689  }
690  DROPBITS(4);
691  len = BITS(4) + 8;
692  if (state->wbits == 0)
693  state->wbits = len;
694  if (len > 15 || len > state->wbits) {
695  strm->msg = (char *)"invalid window size";
696  state->mode = BAD;
697  break;
698  }
699  state->dmax = 1U << len;
700  state->flags = 0; /* indicate zlib header */
701  Tracev((stderr, "inflate: zlib header ok\n"));
702  strm->adler = state->check = adler32(0L, Z_NULL, 0);
703  state->mode = hold & 0x200 ? DICTID : TYPE;
704  INITBITS();
705  break;
706 #ifdef GUNZIP
707  case FLAGS:
708  NEEDBITS(16);
709  state->flags = (int)(hold);
710  if ((state->flags & 0xff) != Z_DEFLATED) {
711  strm->msg = (char *)"unknown compression method";
712  state->mode = BAD;
713  break;
714  }
715  if (state->flags & 0xe000) {
716  strm->msg = (char *)"unknown header flags set";
717  state->mode = BAD;
718  break;
719  }
720  if (state->head != Z_NULL)
721  state->head->text = (int)((hold >> 8) & 1);
722  if ((state->flags & 0x0200) && (state->wrap & 4))
723  CRC2(state->check, hold);
724  INITBITS();
725  state->mode = TIME;
726  /* fallthrough */
727  case TIME:
728  NEEDBITS(32);
729  if (state->head != Z_NULL)
730  state->head->time = hold;
731  if ((state->flags & 0x0200) && (state->wrap & 4))
732  CRC4(state->check, hold);
733  INITBITS();
734  state->mode = OS;
735  /* fallthrough */
736  case OS:
737  NEEDBITS(16);
738  if (state->head != Z_NULL) {
739  state->head->xflags = (int)(hold & 0xff);
740  state->head->os = (int)(hold >> 8);
741  }
742  if ((state->flags & 0x0200) && (state->wrap & 4))
743  CRC2(state->check, hold);
744  INITBITS();
745  state->mode = EXLEN;
746  /* fallthrough */
747  case EXLEN:
748  if (state->flags & 0x0400) {
749  NEEDBITS(16);
750  state->length = (unsigned)(hold);
751  if (state->head != Z_NULL)
752  state->head->extra_len = (unsigned)hold;
753  if ((state->flags & 0x0200) && (state->wrap & 4))
754  CRC2(state->check, hold);
755  INITBITS();
756  }
757  else if (state->head != Z_NULL)
758  state->head->extra = Z_NULL;
759  state->mode = EXTRA;
760  /* fallthrough */
761  case EXTRA:
762  if (state->flags & 0x0400) {
763  copy = state->length;
764  if (copy > have) copy = have;
765  if (copy) {
766  if (state->head != Z_NULL &&
767  state->head->extra != Z_NULL) {
768  len = state->head->extra_len - state->length;
769  zmemcpy(state->head->extra + len, next,
770  len + copy > state->head->extra_max ?
771  state->head->extra_max - len : copy);
772  }
773  if ((state->flags & 0x0200) && (state->wrap & 4))
774  state->check = crc32(state->check, next, copy);
775  have -= copy;
776  next += copy;
777  state->length -= copy;
778  }
779  if (state->length) goto inf_leave;
780  }
781  state->length = 0;
782  state->mode = NAME;
783  /* fallthrough */
784  case NAME:
785  if (state->flags & 0x0800) {
786  if (have == 0) goto inf_leave;
787  copy = 0;
788  do {
789  len = (unsigned)(next[copy++]);
790  if (state->head != Z_NULL &&
791  state->head->name != Z_NULL &&
792  state->length < state->head->name_max)
793  state->head->name[state->length++] = (Bytef)len;
794  } while (len && copy < have);
795  if ((state->flags & 0x0200) && (state->wrap & 4))
796  state->check = crc32(state->check, next, copy);
797  have -= copy;
798  next += copy;
799  if (len) goto inf_leave;
800  }
801  else if (state->head != Z_NULL)
802  state->head->name = Z_NULL;
803  state->length = 0;
804  state->mode = COMMENT;
805  /* fallthrough */
806  case COMMENT:
807  if (state->flags & 0x1000) {
808  if (have == 0) goto inf_leave;
809  copy = 0;
810  do {
811  len = (unsigned)(next[copy++]);
812  if (state->head != Z_NULL &&
813  state->head->comment != Z_NULL &&
814  state->length < state->head->comm_max)
815  state->head->comment[state->length++] = (Bytef)len;
816  } while (len && copy < have);
817  if ((state->flags & 0x0200) && (state->wrap & 4))
818  state->check = crc32(state->check, next, copy);
819  have -= copy;
820  next += copy;
821  if (len) goto inf_leave;
822  }
823  else if (state->head != Z_NULL)
824  state->head->comment = Z_NULL;
825  state->mode = HCRC;
826  /* fallthrough */
827  case HCRC:
828  if (state->flags & 0x0200) {
829  NEEDBITS(16);
830  if ((state->wrap & 4) && hold != (state->check & 0xffff)) {
831  strm->msg = (char *)"header crc mismatch";
832  state->mode = BAD;
833  break;
834  }
835  INITBITS();
836  }
837  if (state->head != Z_NULL) {
838  state->head->hcrc = (int)((state->flags >> 9) & 1);
839  state->head->done = 1;
840  }
841  strm->adler = state->check = crc32(0L, Z_NULL, 0);
842  state->mode = TYPE;
843  break;
844 #endif
845  case DICTID:
846  NEEDBITS(32);
847  strm->adler = state->check = ZSWAP32(hold);
848  INITBITS();
849  state->mode = DICT;
850  /* fallthrough */
851  case DICT:
852  if (state->havedict == 0) {
853  RESTORE();
854  return Z_NEED_DICT;
855  }
856  strm->adler = state->check = adler32(0L, Z_NULL, 0);
857  state->mode = TYPE;
858  /* fallthrough */
859  case TYPE:
860  if (flush == Z_BLOCK || flush == Z_TREES) goto inf_leave;
861  /* fallthrough */
862  case TYPEDO:
863  if (state->last) {
864  BYTEBITS();
865  state->mode = CHECK;
866  break;
867  }
868  NEEDBITS(3);
869  state->last = BITS(1);
870  DROPBITS(1);
871  switch (BITS(2)) {
872  case 0: /* stored block */
873  Tracev((stderr, "inflate: stored block%s\n",
874  state->last ? " (last)" : ""));
875  state->mode = STORED;
876  break;
877  case 1: /* fixed block */
879  Tracev((stderr, "inflate: fixed codes block%s\n",
880  state->last ? " (last)" : ""));
881  state->mode = LEN_; /* decode codes */
882  if (flush == Z_TREES) {
883  DROPBITS(2);
884  goto inf_leave;
885  }
886  break;
887  case 2: /* dynamic block */
888  Tracev((stderr, "inflate: dynamic codes block%s\n",
889  state->last ? " (last)" : ""));
890  state->mode = TABLE;
891  break;
892  case 3:
893  strm->msg = (char *)"invalid block type";
894  state->mode = BAD;
895  }
896  DROPBITS(2);
897  break;
898  case STORED:
899  BYTEBITS(); /* go to byte boundary */
900  NEEDBITS(32);
901  if ((hold & 0xffff) != ((hold >> 16) ^ 0xffff)) {
902  strm->msg = (char *)"invalid stored block lengths";
903  state->mode = BAD;
904  break;
905  }
906  state->length = (unsigned)hold & 0xffff;
907  Tracev((stderr, "inflate: stored length %u\n",
908  state->length));
909  INITBITS();
910  state->mode = COPY_;
911  if (flush == Z_TREES) goto inf_leave;
912  /* fallthrough */
913  case COPY_:
914  state->mode = COPY;
915  /* fallthrough */
916  case COPY:
917  copy = state->length;
918  if (copy) {
919  if (copy > have) copy = have;
920  if (copy > left) copy = left;
921  if (copy == 0) goto inf_leave;
922  zmemcpy(put, next, copy);
923  have -= copy;
924  next += copy;
925  left -= copy;
926  put += copy;
927  state->length -= copy;
928  break;
929  }
930  Tracev((stderr, "inflate: stored end\n"));
931  state->mode = TYPE;
932  break;
933  case TABLE:
934  NEEDBITS(14);
935  state->nlen = BITS(5) + 257;
936  DROPBITS(5);
937  state->ndist = BITS(5) + 1;
938  DROPBITS(5);
939  state->ncode = BITS(4) + 4;
940  DROPBITS(4);
941 #ifndef PKZIP_BUG_WORKAROUND
942  if (state->nlen > 286 || state->ndist > 30) {
943  strm->msg = (char *)"too many length or distance symbols";
944  state->mode = BAD;
945  break;
946  }
947 #endif
948  Tracev((stderr, "inflate: table sizes ok\n"));
949  state->have = 0;
950  state->mode = LENLENS;
951  /* fallthrough */
952  case LENLENS:
953  while (state->have < state->ncode) {
954  NEEDBITS(3);
955  state->lens[order[state->have++]] = (unsigned short)BITS(3);
956  DROPBITS(3);
957  }
958  while (state->have < 19)
959  state->lens[order[state->have++]] = 0;
960  state->next = state->codes;
961  state->lencode = (const code FAR *)(state->next);
962  state->lenbits = 7;
963  ret = inflate_table(CODES, state->lens, 19, &(state->next),
964  &(state->lenbits), state->work);
965  if (ret) {
966  strm->msg = (char *)"invalid code lengths set";
967  state->mode = BAD;
968  break;
969  }
970  Tracev((stderr, "inflate: code lengths ok\n"));
971  state->have = 0;
972  state->mode = CODELENS;
973  /* fallthrough */
974  case CODELENS:
975  while (state->have < state->nlen + state->ndist) {
976  for (;;) {
977  here = state->lencode[BITS(state->lenbits)];
978  if ((unsigned)(here.bits) <= bits) break;
979  PULLBYTE();
980  }
981  if (here.val < 16) {
982  DROPBITS(here.bits);
983  state->lens[state->have++] = here.val;
984  }
985  else {
986  if (here.val == 16) {
987  NEEDBITS(here.bits + 2);
988  DROPBITS(here.bits);
989  if (state->have == 0) {
990  strm->msg = (char *)"invalid bit length repeat";
991  state->mode = BAD;
992  break;
993  }
994  len = state->lens[state->have - 1];
995  copy = 3 + BITS(2);
996  DROPBITS(2);
997  }
998  else if (here.val == 17) {
999  NEEDBITS(here.bits + 3);
1000  DROPBITS(here.bits);
1001  len = 0;
1002  copy = 3 + BITS(3);
1003  DROPBITS(3);
1004  }
1005  else {
1006  NEEDBITS(here.bits + 7);
1007  DROPBITS(here.bits);
1008  len = 0;
1009  copy = 11 + BITS(7);
1010  DROPBITS(7);
1011  }
1012  if (state->have + copy > state->nlen + state->ndist) {
1013  strm->msg = (char *)"invalid bit length repeat";
1014  state->mode = BAD;
1015  break;
1016  }
1017  while (copy--)
1018  state->lens[state->have++] = (unsigned short)len;
1019  }
1020  }
1021 
1022  /* handle error breaks in while */
1023  if (state->mode == BAD) break;
1024 
1025  /* check for end-of-block code (better have one) */
1026  if (state->lens[256] == 0) {
1027  strm->msg = (char *)"invalid code -- missing end-of-block";
1028  state->mode = BAD;
1029  break;
1030  }
1031 
1032  /* build code tables -- note: do not change the lenbits or distbits
1033  values here (9 and 6) without reading the comments in inftrees.h
1034  concerning the ENOUGH constants, which depend on those values */
1035  state->next = state->codes;
1036  state->lencode = (const code FAR *)(state->next);
1037  state->lenbits = 9;
1038  ret = inflate_table(LENS, state->lens, state->nlen, &(state->next),
1039  &(state->lenbits), state->work);
1040  if (ret) {
1041  strm->msg = (char *)"invalid literal/lengths set";
1042  state->mode = BAD;
1043  break;
1044  }
1045  state->distcode = (const code FAR *)(state->next);
1046  state->distbits = 6;
1047  ret = inflate_table(DISTS, state->lens + state->nlen, state->ndist,
1048  &(state->next), &(state->distbits), state->work);
1049  if (ret) {
1050  strm->msg = (char *)"invalid distances set";
1051  state->mode = BAD;
1052  break;
1053  }
1054  Tracev((stderr, "inflate: codes ok\n"));
1055  state->mode = LEN_;
1056  if (flush == Z_TREES) goto inf_leave;
1057  /* fallthrough */
1058  case LEN_:
1059  state->mode = LEN;
1060  /* fallthrough */
1061  case LEN:
1062  if (have >= 6 && left >= 258) {
1063  RESTORE();
1064  inflate_fast(strm, out);
1065  LOAD();
1066  if (state->mode == TYPE)
1067  state->back = -1;
1068  break;
1069  }
1070  state->back = 0;
1071  for (;;) {
1072  here = state->lencode[BITS(state->lenbits)];
1073  if ((unsigned)(here.bits) <= bits) break;
1074  PULLBYTE();
1075  }
1076  if (here.op && (here.op & 0xf0) == 0) {
1077  last = here;
1078  for (;;) {
1079  here = state->lencode[last.val +
1080  (BITS(last.bits + last.op) >> last.bits)];
1081  if ((unsigned)(last.bits + here.bits) <= bits) break;
1082  PULLBYTE();
1083  }
1084  DROPBITS(last.bits);
1085  state->back += last.bits;
1086  }
1087  DROPBITS(here.bits);
1088  state->back += here.bits;
1089  state->length = (unsigned)here.val;
1090  if ((int)(here.op) == 0) {
1091  Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
1092  "inflate: literal '%c'\n" :
1093  "inflate: literal 0x%02x\n", here.val));
1094  state->mode = LIT;
1095  break;
1096  }
1097  if (here.op & 32) {
1098  Tracevv((stderr, "inflate: end of block\n"));
1099  state->back = -1;
1100  state->mode = TYPE;
1101  break;
1102  }
1103  if (here.op & 64) {
1104  strm->msg = (char *)"invalid literal/length code";
1105  state->mode = BAD;
1106  break;
1107  }
1108  state->extra = (unsigned)(here.op) & 15;
1109  state->mode = LENEXT;
1110  /* fallthrough */
1111  case LENEXT:
1112  if (state->extra) {
1113  NEEDBITS(state->extra);
1114  state->length += BITS(state->extra);
1115  DROPBITS(state->extra);
1116  state->back += state->extra;
1117  }
1118  Tracevv((stderr, "inflate: length %u\n", state->length));
1119  state->was = state->length;
1120  state->mode = DIST;
1121  /* fallthrough */
1122  case DIST:
1123  for (;;) {
1124  here = state->distcode[BITS(state->distbits)];
1125  if ((unsigned)(here.bits) <= bits) break;
1126  PULLBYTE();
1127  }
1128  if ((here.op & 0xf0) == 0) {
1129  last = here;
1130  for (;;) {
1131  here = state->distcode[last.val +
1132  (BITS(last.bits + last.op) >> last.bits)];
1133  if ((unsigned)(last.bits + here.bits) <= bits) break;
1134  PULLBYTE();
1135  }
1136  DROPBITS(last.bits);
1137  state->back += last.bits;
1138  }
1139  DROPBITS(here.bits);
1140  state->back += here.bits;
1141  if (here.op & 64) {
1142  strm->msg = (char *)"invalid distance code";
1143  state->mode = BAD;
1144  break;
1145  }
1146  state->offset = (unsigned)here.val;
1147  state->extra = (unsigned)(here.op) & 15;
1148  state->mode = DISTEXT;
1149  /* fallthrough */
1150  case DISTEXT:
1151  if (state->extra) {
1152  NEEDBITS(state->extra);
1153  state->offset += BITS(state->extra);
1154  DROPBITS(state->extra);
1155  state->back += state->extra;
1156  }
1157 #ifdef INFLATE_STRICT
1158  if (state->offset > state->dmax) {
1159  strm->msg = (char *)"invalid distance too far back";
1160  state->mode = BAD;
1161  break;
1162  }
1163 #endif
1164  Tracevv((stderr, "inflate: distance %u\n", state->offset));
1165  state->mode = MATCH;
1166  /* fallthrough */
1167  case MATCH:
1168  if (left == 0) goto inf_leave;
1169  copy = out - left;
1170  if (state->offset > copy) { /* copy from window */
1171  copy = state->offset - copy;
1172  if (copy > state->whave) {
1173  if (state->sane) {
1174  strm->msg = (char *)"invalid distance too far back";
1175  state->mode = BAD;
1176  break;
1177  }
1178 #ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
1179  Trace((stderr, "inflate.c too far\n"));
1180  copy -= state->whave;
1181  if (copy > state->length) copy = state->length;
1182  if (copy > left) copy = left;
1183  left -= copy;
1184  state->length -= copy;
1185  do {
1186  *put++ = 0;
1187  } while (--copy);
1188  if (state->length == 0) state->mode = LEN;
1189  break;
1190 #endif
1191  }
1192  if (copy > state->wnext) {
1193  copy -= state->wnext;
1194  from = state->window + (state->wsize - copy);
1195  }
1196  else
1197  from = state->window + (state->wnext - copy);
1198  if (copy > state->length) copy = state->length;
1199  }
1200  else { /* copy from output */
1201  from = put - state->offset;
1202  copy = state->length;
1203  }
1204  if (copy > left) copy = left;
1205  left -= copy;
1206  state->length -= copy;
1207  do {
1208  *put++ = *from++;
1209  } while (--copy);
1210  if (state->length == 0) state->mode = LEN;
1211  break;
1212  case LIT:
1213  if (left == 0) goto inf_leave;
1214  *put++ = (unsigned char)(state->length);
1215  left--;
1216  state->mode = LEN;
1217  break;
1218  case CHECK:
1219  if (state->wrap) {
1220  NEEDBITS(32);
1221  out -= left;
1222  strm->total_out += out;
1223  state->total += out;
1224  if ((state->wrap & 4) && out)
1225  strm->adler = state->check =
1226  UPDATE_CHECK(state->check, put - out, out);
1227  out = left;
1228  if ((state->wrap & 4) && (
1229 #ifdef GUNZIP
1230  state->flags ? hold :
1231 #endif
1232  ZSWAP32(hold)) != state->check) {
1233  strm->msg = (char *)"incorrect data check";
1234  state->mode = BAD;
1235  break;
1236  }
1237  INITBITS();
1238  Tracev((stderr, "inflate: check matches trailer\n"));
1239  }
1240 #ifdef GUNZIP
1241  state->mode = LENGTH;
1242  /* fallthrough */
1243  case LENGTH:
1244  if (state->wrap && state->flags) {
1245  NEEDBITS(32);
1246  if ((state->wrap & 4) && hold != (state->total & 0xffffffff)) {
1247  strm->msg = (char *)"incorrect length check";
1248  state->mode = BAD;
1249  break;
1250  }
1251  INITBITS();
1252  Tracev((stderr, "inflate: length matches trailer\n"));
1253  }
1254 #endif
1255  state->mode = DONE;
1256  /* fallthrough */
1257  case DONE:
1258  ret = Z_STREAM_END;
1259  goto inf_leave;
1260  case BAD:
1261  ret = Z_DATA_ERROR;
1262  goto inf_leave;
1263  case MEM:
1264  return Z_MEM_ERROR;
1265  case SYNC:
1266  /* fallthrough */
1267  default:
1268  return Z_STREAM_ERROR;
1269  }
1270 
1271  /*
1272  Return from inflate(), updating the total counts and the check value.
1273  If there was no progress during the inflate() call, return a buffer
1274  error. Call updatewindow() to create and/or update the window state.
1275  Note: a memory error from inflate() is non-recoverable.
1276  */
1277  inf_leave:
1278  RESTORE();
1279  if (state->wsize || (out != strm->avail_out && state->mode < BAD &&
1280  (state->mode < CHECK || flush != Z_FINISH)))
1281  if (updatewindow(strm, strm->next_out, out - strm->avail_out)) {
1282  state->mode = MEM;
1283  return Z_MEM_ERROR;
1284  }
1285  in -= strm->avail_in;
1286  out -= strm->avail_out;
1287  strm->total_in += in;
1288  strm->total_out += out;
1289  state->total += out;
1290  if ((state->wrap & 4) && out)
1291  strm->adler = state->check =
1292  UPDATE_CHECK(state->check, strm->next_out - out, out);
1293  strm->data_type = (int)state->bits + (state->last ? 64 : 0) +
1294  (state->mode == TYPE ? 128 : 0) +
1295  (state->mode == LEN_ || state->mode == COPY_ ? 256 : 0);
1296  if (((in == 0 && out == 0) || flush == Z_FINISH) && ret == Z_OK)
1297  ret = Z_BUF_ERROR;
1298  return ret;
1299 }
#define Z_BLOCK
Definition: zlib.h:110
Definition: inflate.c:161
#define NEEDBITS(n)
Definition: inflate.c:517
Definition: inflate.c:152
unsigned short val
Definition: inflate.c:142
GLuint GLdouble GLdouble GLint GLint order
Definition: glext.h:11194
Definition: inflate.c:159
Definition: inflate.c:186
#define crc32(crc, buf, len)
Definition: inflate.c:1076
Definition: inflate.c:164
Definition: inflate.c:160
Definition: inflate.c:177
Definition: inflate.c:184
POINT last
Definition: font.c:46
#define Z_STREAM_ERROR
Definition: zlib.h:118
#define zmemcpy
Definition: inflate.c:33
#define Z_OK
Definition: zlib.h:114
#define U(x)
Definition: wordpad.c:45
z_streamp strm
Definition: inflate.c:195
unsigned have
Definition: inflate.c:229
void fixedtables(struct inflate_state FAR *state)
Definition: inflate.c:279
Definition: inflate.c:173
#define BITS(n)
Definition: inflate.c:524
#define Tracevv(x)
Definition: inflate.c:44
if(dx==0 &&dy==0)
Definition: linetemp.h:174
GLenum GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * bits
Definition: glext.h:10929
unsigned char op
Definition: inflate.c:140
Definition: inflate.c:187
Definition: inflate.c:178
#define put(ret, state, sp, n)
Definition: match.c:105
#define Trace(x)
Definition: inflate.c:37
unsigned short(__cdecl typeof(TIFFCurrentDirectory))(struct tiff *)
Definition: typeof.h:94
#define L(x)
Definition: ntvdm.h:50
#define Z_STREAM_END
Definition: zlib.h:115
void ZLIB_INTERNAL inflate_fast(z_streamp strm, unsigned start)
Definition: inffast.c:50
#define LOAD()
Definition: inflate.c:477
unsigned char
Definition: typeof.h:29
#define INITBITS()
Definition: inflate.c:499
#define Tracev(x)
Definition: inflate.c:43
int inflateStateCheck(z_streamp strm)
Definition: inflate.c:105
Definition: inflate.c:180
unsigned long hold
Definition: inflate.c:213
Definition: inflate.c:172
int flush
Definition: zlib.h:309
Definition: inflate.c:169
Definition: inflate.c:188
#define PULLBYTE()
Definition: inflate.c:507
#define GUNZIP
Definition: inflate.c:47
#define ZSWAP32(q)
Definition: inflate.c:55
static FILE * out
Definition: regtests2xml.c:44
GLint left
Definition: glext.h:7726
#define BYTEBITS()
Definition: inflate.c:535
#define CRC4(check, word)
Definition: inflate.c:466
Definition: inflate.c:162
int ret
unsigned char bits
Definition: inflate.c:141
Definition: inflate.c:153
#define UPDATE_CHECK(check, buf, len)
Definition: inflate.c:451
static int state
Definition: maze.c:121
GLenum GLsizei len
Definition: glext.h:6722
Definition: inflate.c:139
int updatewindow(z_streamp strm, const Bytef *end, unsigned copy)
Definition: inflate.c:397
#define Z_DEFLATED
Definition: zlib.h:146
#define Z_TREES
Definition: zlib.h:111
#define Z_FINISH
Definition: zlib.h:109
#define Z_NULL
Definition: zlib.h:149
static unsigned __int64 next
Definition: rand_nt.c:6
#define CRC2(check, word)
Definition: inflate.c:459
Definition: inflate.c:189
GLuint in
Definition: glext.h:9616
TYPE
Definition: eventcreate.c:651
#define RESTORE()
Definition: inflate.c:488
Definition: inflate.c:168
#define Z_BUF_ERROR
Definition: zlib.h:121
INT copy(TCHAR source[MAX_PATH], TCHAR dest[MAX_PATH], INT append, DWORD lpdwFlags, BOOL bTouch)
Definition: copy.c:51
Definition: inflate.c:182
#define Z_NEED_DICT
Definition: zlib.h:116
Byte FAR Bytef
Definition: zlib.h:41
#define Z_MEM_ERROR
Definition: zlib.h:120
#define DROPBITS(n)
Definition: inflate.c:528
#define z_const
Definition: zlib.h:35
Definition: inflate.c:166
#define Z_DATA_ERROR
Definition: zlib.h:119
FILE * stderr
int ZLIB_INTERNAL inflate_table(codetype type, unsigned short FAR *lens, unsigned codes, code FAR *FAR *table, unsigned FAR *bits, unsigned short FAR *work)
Definition: inftrees.c:32
Definition: inflate.c:183
Definition: inflate.c:158
#define FAR
Definition: zlib.h:34
CardRegion * from
Definition: spigame.cpp:19
Definition: inflate.c:151
Definition: inflate.c:163
Definition: inflate.c:174
uLong ZEXPORT adler32(uLong adler, const Bytef *buf, uInt len)
Definition: adler32.c:134
static unsigned(__cdecl *hash_bstr)(bstr_t s)
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
Definition: typeof.h:31

◆ inflateCodesUsed()

unsigned long ZEXPORT inflateCodesUsed ( z_streamp  strm)

Definition at line 1585 of file inflate.c.

1587 {
1588  struct inflate_state FAR *state;
1589  if (inflateStateCheck(strm)) return (unsigned long)-1;
1590  state = (struct inflate_state FAR *)strm->state;
1591  return (unsigned long)(state->next - state->codes);
1592 }
return
Definition: dirsup.c:529
z_streamp strm
Definition: inflate.c:195
int inflateStateCheck(z_streamp strm)
Definition: inflate.c:105
static int state
Definition: maze.c:121
#define FAR
Definition: zlib.h:34

◆ inflateCopy()

int ZEXPORT inflateCopy ( z_streamp  dest,
z_streamp  source 
)

Definition at line 1492 of file inflate.c.

1495 {
1496  struct inflate_state FAR *state;
1497  struct inflate_state FAR *copy;
1498  unsigned char FAR *window;
1499  unsigned wsize;
1500 
1501  /* check input */
1502  if (inflateStateCheck(source) || dest == Z_NULL)
1503  return Z_STREAM_ERROR;
1504  state = (struct inflate_state FAR *)source->state;
1505 
1506  /* allocate space */
1507  copy = (struct inflate_state FAR *)
1508  ZALLOC(source, 1, sizeof(struct inflate_state));
1509  if (copy == Z_NULL) return Z_MEM_ERROR;
1510  window = Z_NULL;
1511  if (state->window != Z_NULL) {
1512  window = (unsigned char FAR *)
1513  ZALLOC(source, 1U << state->wbits, sizeof(unsigned char));
1514  if (window == Z_NULL) {
1515  ZFREE(source, copy);
1516  return Z_MEM_ERROR;
1517  }
1518  }
1519 
1520  /* copy state */
1521  zmemcpy((voidpf)dest, (voidpf)source, sizeof(z_stream));
1522  zmemcpy((voidpf)copy, (voidpf)state, sizeof(struct inflate_state));
1523  copy->strm = dest;
1524  if (state->lencode >= state->codes &&
1525  state->lencode <= state->codes + ENOUGH - 1) {
1526  copy->lencode = copy->codes + (state->lencode - state->codes);
1527  copy->distcode = copy->codes + (state->distcode - state->codes);
1528  }
1529  copy->next = copy->codes + (state->next - state->codes);
1530  if (window != Z_NULL) {
1531  wsize = 1U << state->wbits;
1532  zmemcpy(window, state->window, wsize);
1533  }
1534  copy->window = window;
1535  dest->state = (struct internal_state FAR *)copy;
1536  return Z_OK;
1537 }
void FAR * voidpf
Definition: zlib.h:42
#define Z_STREAM_ERROR
Definition: zlib.h:118
#define zmemcpy
Definition: inflate.c:33
#define Z_OK
Definition: zlib.h:114
#define U(x)
Definition: wordpad.c:45
unsigned wsize
Definition: inflate.c:208
#define ENOUGH
Definition: inflate.c:147
#define ZFREE(strm, addr)
Definition: inflate.c:51
int inflateStateCheck(z_streamp strm)
Definition: inflate.c:105
static int state
Definition: maze.c:121
static IHTMLWindow2 * window
Definition: events.c:77
#define ZALLOC(strm, items, size)
Definition: inflate.c:49
#define Z_NULL
Definition: zlib.h:149
INT copy(TCHAR source[MAX_PATH], TCHAR dest[MAX_PATH], INT append, DWORD lpdwFlags, BOOL bTouch)
Definition: copy.c:51
#define Z_MEM_ERROR
Definition: zlib.h:120
static char * dest
Definition: rtl.c:135
#define FAR
Definition: zlib.h:34

◆ inflateEnd()

int ZEXPORT inflateEnd ( z_streamp  strm)

Definition at line 1301 of file inflate.c.

1303 {
1304  struct inflate_state FAR *state;
1305  if (inflateStateCheck(strm))
1306  return Z_STREAM_ERROR;
1307  state = (struct inflate_state FAR *)strm->state;
1308  if (state->window != Z_NULL) ZFREE(strm, state->window);
1309  ZFREE(strm, strm->state);
1310  strm->state = Z_NULL;
1311  Tracev((stderr, "inflate: end\n"));
1312  return Z_OK;
1313 }
#define Z_STREAM_ERROR
Definition: zlib.h:118
#define Z_OK
Definition: zlib.h:114
z_streamp strm
Definition: inflate.c:195
if(dx==0 &&dy==0)
Definition: linetemp.h:174
#define ZFREE(strm, addr)
Definition: inflate.c:51
#define Tracev(x)
Definition: inflate.c:43
int inflateStateCheck(z_streamp strm)
Definition: inflate.c:105
static int state
Definition: maze.c:121
#define Z_NULL
Definition: zlib.h:149
FILE * stderr
#define FAR
Definition: zlib.h:34

◆ inflateGetDictionary()

int ZEXPORT inflateGetDictionary ( z_streamp  strm,
Bytef dictionary,
uInt dictLength 
)

Definition at line 1315 of file inflate.c.

1319 {
1320  struct inflate_state FAR *state;
1321 
1322  /* check state */
1323  if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
1324  state = (struct inflate_state FAR *)strm->state;
1325 
1326  /* copy dictionary */
1327  if (state->whave && dictionary != Z_NULL) {
1328  zmemcpy(dictionary, state->window + state->wnext,
1329  state->whave - state->wnext);
1330  zmemcpy(dictionary + state->whave - state->wnext,
1331  state->window, state->wnext);
1332  }
1333  if (dictLength != Z_NULL)
1334  *dictLength = state->whave;
1335  return Z_OK;
1336 }
#define Z_STREAM_ERROR
Definition: zlib.h:118
#define zmemcpy
Definition: inflate.c:33
#define Z_OK
Definition: zlib.h:114
z_streamp strm
Definition: inflate.c:195
if(dx==0 &&dy==0)
Definition: linetemp.h:174
int inflateStateCheck(z_streamp strm)
Definition: inflate.c:105
static int state
Definition: maze.c:121
#define Z_NULL
Definition: zlib.h:149
#define FAR
Definition: zlib.h:34

◆ inflateGetHeader()

int ZEXPORT inflateGetHeader ( z_streamp  strm,
gz_headerp  head 
)

Definition at line 1373 of file inflate.c.

1376 {
1377  struct inflate_state FAR *state;
1378 
1379  /* check state */
1380  if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
1381  state = (struct inflate_state FAR *)strm->state;
1382  if ((state->wrap & 2) == 0) return Z_STREAM_ERROR;
1383 
1384  /* save header structure */
1385  state->head = head;
1386  head->done = 0;
1387  return Z_OK;
1388 }
struct outqueuenode * head
Definition: adnsresfilter.c:66
#define Z_STREAM_ERROR
Definition: zlib.h:118
#define Z_OK
Definition: zlib.h:114
z_streamp strm
Definition: inflate.c:195
if(dx==0 &&dy==0)
Definition: linetemp.h:174
int inflateStateCheck(z_streamp strm)
Definition: inflate.c:105
static int state
Definition: maze.c:121
#define FAR
Definition: zlib.h:34

◆ inflateInit2_()

int ZEXPORT inflateInit2_ ( z_streamp  strm,
int  windowBits,
const char version,
int  stream_size 
)

Definition at line 196 of file inflate.c.

201 {
202  int ret;
203  struct inflate_state FAR *state;
204 
205  if (version == Z_NULL || version[0] != ZLIB_VERSION[0] ||
206  stream_size != (int)(sizeof(z_stream)))
207  return Z_VERSION_ERROR;
208  if (strm == Z_NULL) return Z_STREAM_ERROR;
209  strm->msg = Z_NULL; /* in case we return an error */
210  if (strm->zalloc == (alloc_func)0) {
211 #ifdef Z_SOLO
212  return Z_STREAM_ERROR;
213 #else
214  strm->zalloc = zcalloc;
215  strm->opaque = (voidpf)0;
216 #endif
217  }
218  if (strm->zfree == (free_func)0)
219 #ifdef Z_SOLO
220  return Z_STREAM_ERROR;
221 #else
222  strm->zfree = zcfree;
223 #endif
224  state = (struct inflate_state FAR *)
225  ZALLOC(strm, 1, sizeof(struct inflate_state));
226  if (state == Z_NULL) return Z_MEM_ERROR;
227  Tracev((stderr, "inflate: allocated\n"));
228  strm->state = (struct internal_state FAR *)state;
229  state->strm = strm;
230  state->window = Z_NULL;
231  state->mode = HEAD; /* to pass state test in inflateReset2() */
233  if (ret != Z_OK) {
234  ZFREE(strm, state);
235  strm->state = Z_NULL;
236  }
237  return ret;
238 }
int windowBits
Definition: zlib.h:813
#define Z_VERSION_ERROR
Definition: zlib.h:122
void FAR * voidpf
Definition: zlib.h:42
#define Z_STREAM_ERROR
Definition: zlib.h:118
#define Z_OK
Definition: zlib.h:114
z_streamp strm
Definition: inflate.c:195
#define Z_SOLO
Definition: cabinet.c:13
#define ZLIB_VERSION
Definition: zlib.h:40
#define ZFREE(strm, addr)
Definition: inflate.c:51
static const WCHAR version[]
Definition: asmname.c:66
z_streamp strm
Definition: deflate.h:101
#define Tracev(x)
Definition: inflate.c:43
void(* free_func)(voidpf opaque, voidpf address)
Definition: zlib.h:54
int const char int stream_size
Definition: zlib.h:813
int ret
static int state
Definition: maze.c:121
#define ZALLOC(strm, items, size)
Definition: inflate.c:49
int ZEXPORT inflateReset2(z_streamp strm, int windowBits)
Definition: inflate.c:158
#define Z_NULL
Definition: zlib.h:149
void zcfree(voidpf opaque, voidpf ptr)
Definition: zutil.c:173
voidpf zcalloc(voidpf opaque, unsigned items, unsigned size)
Definition: zutil.c:164
#define Z_MEM_ERROR
Definition: zlib.h:120
voidpf(* alloc_func)(voidpf opaque, uInt items, uInt size)
Definition: zlib.h:53
FILE * stderr
Definition: inflate.c:158
#define FAR
Definition: zlib.h:34

Referenced by inflateInit_().

◆ inflateInit_()

int ZEXPORT inflateInit_ ( z_streamp  strm,
const char version,
int  stream_size 
)

Definition at line 240 of file inflate.c.

244 {
246 }
static const WCHAR version[]
Definition: asmname.c:66
z_streamp strm
Definition: deflate.h:101
int const char int stream_size
Definition: zlib.h:813
#define DEF_WBITS
Definition: inflate.c:37
int ZEXPORT inflateInit2_(z_streamp strm, int windowBits, const char *version, int stream_size)
Definition: inflate.c:196

◆ inflateMark()

long ZEXPORT inflateMark ( z_streamp  strm)

Definition at line 1572 of file inflate.c.

1574 {
1575  struct inflate_state FAR *state;
1576 
1577  if (inflateStateCheck(strm))
1578  return -(1L << 16);
1579  state = (struct inflate_state FAR *)strm->state;
1580  return (long)(((unsigned long)((long)state->back)) << 16) +
1581  (state->mode == COPY ? state->length :
1582  (state->mode == MATCH ? state->was - state->length : 0));
1583 }
return
Definition: dirsup.c:529
z_streamp strm
Definition: inflate.c:195
Definition: inflate.c:173
#define L(x)
Definition: ntvdm.h:50
int inflateStateCheck(z_streamp strm)
Definition: inflate.c:105
static int state
Definition: maze.c:121
#define long
Definition: qsort.c:33
Definition: inflate.c:182
#define FAR
Definition: zlib.h:34

◆ inflatePrime()

int ZEXPORT inflatePrime ( z_streamp  strm,
int  bits,
int  value 
)

Definition at line 248 of file inflate.c.

252 {
253  struct inflate_state FAR *state;
254 
256  state = (struct inflate_state FAR *)strm->state;
257  if (bits < 0) {
258  state->hold = 0;
259  state->bits = 0;
260  return Z_OK;
261  }
262  if (bits > 16 || state->bits + (uInt)bits > 32) return Z_STREAM_ERROR;
263  value &= (1L << bits) - 1;
264  state->hold += (unsigned)value << state->bits;
265  state->bits += (uInt)bits;
266  return Z_OK;
267 }
Definition: pdh_main.c:93
#define Z_STREAM_ERROR
Definition: zlib.h:118
#define Z_OK
Definition: zlib.h:114
z_streamp strm
Definition: inflate.c:195
if(dx==0 &&dy==0)
Definition: linetemp.h:174
GLenum GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * bits
Definition: glext.h:10929
#define L(x)
Definition: ntvdm.h:50
int inflateStateCheck(z_streamp strm)
Definition: inflate.c:105
static int state
Definition: maze.c:121
unsigned int uInt
Definition: zlib.h:38
#define FAR
Definition: zlib.h:34
static unsigned(__cdecl *hash_bstr)(bstr_t s)

◆ inflateReset()

int ZEXPORT inflateReset ( z_streamp  strm)

Definition at line 145 of file inflate.c.

147 {
148  struct inflate_state FAR *state;
149 
151  state = (struct inflate_state FAR *)strm->state;
152  state->wsize = 0;
153  state->whave = 0;
154  state->wnext = 0;
155  return inflateResetKeep(strm);
156 }
#define Z_STREAM_ERROR
Definition: zlib.h:118
z_streamp strm
Definition: inflate.c:195
int inflateStateCheck(z_streamp strm)
Definition: inflate.c:105
int ZEXPORT inflateResetKeep(z_streamp strm)
Definition: inflate.c:119
static int state
Definition: maze.c:121
#define FAR
Definition: zlib.h:34

Referenced by gz_look(), inflateReset2(), and inflateSync().

◆ inflateReset2()

int ZEXPORT inflateReset2 ( z_streamp  strm,
int  windowBits 
)

Definition at line 158 of file inflate.c.

161 {
162  int wrap;
163  struct inflate_state FAR *state;
164 
165  /* get the state */
167  state = (struct inflate_state FAR *)strm->state;
168 
169  /* extract wrap request from windowBits parameter */
170  if (windowBits < 0) {
171  wrap = 0;
173  }
174  else {
175  wrap = (windowBits >> 4) + 5;
176 #ifdef GUNZIP
177  if (windowBits < 48)
178  windowBits &= 15;
179 #endif
180  }
181 
182  /* set number of window bits, free window if different */
183  if (windowBits && (windowBits < 8 || windowBits > 15))
184  return Z_STREAM_ERROR;
185  if (state->window != Z_NULL && state->wbits != (unsigned)windowBits) {
186  ZFREE(strm, state->window);
187  state->window = Z_NULL;
188  }
189 
190  /* update state and reset the rest of it */
191  state->wrap = wrap;
192  state->wbits = (unsigned)windowBits;
193  return inflateReset(strm);
194 }
int windowBits
Definition: zlib.h:813
#define Z_STREAM_ERROR
Definition: zlib.h:118
z_streamp strm
Definition: inflate.c:195
int ZEXPORT inflateReset(z_streamp strm)
Definition: inflate.c:145
if(dx==0 &&dy==0)
Definition: linetemp.h:174
#define ZFREE(strm, addr)
Definition: inflate.c:51
int inflateStateCheck(z_streamp strm)
Definition: inflate.c:105
static int state
Definition: maze.c:121
#define Z_NULL
Definition: zlib.h:149
#define wrap(journal, var)
Definition: recovery.c:207
#define FAR
Definition: zlib.h:34
static unsigned(__cdecl *hash_bstr)(bstr_t s)

Referenced by inflateInit2_().

◆ inflateResetKeep()

int ZEXPORT inflateResetKeep ( z_streamp  strm)

Definition at line 119 of file inflate.c.

121 {
122  struct inflate_state FAR *state;
123 
125  state = (struct inflate_state FAR *)strm->state;
126  strm->total_in = strm->total_out = state->total = 0;
127  strm->msg = Z_NULL;
128  if (state->wrap) /* to support ill-conceived Java test suite */
129  strm->adler = state->wrap & 1;
130  state->mode = HEAD;
131  state->last = 0;
132  state->havedict = 0;
133  state->flags = -1;
134  state->dmax = 32768U;
135  state->head = Z_NULL;
136  state->hold = 0;
137  state->bits = 0;
138  state->lencode = state->distcode = state->next = state->codes;
139  state->sane = 1;
140  state->back = -1;
141  Tracev((stderr, "inflate: reset\n"));
142  return Z_OK;
143 }
#define Z_STREAM_ERROR
Definition: zlib.h:118
#define Z_OK
Definition: zlib.h:114
#define U(x)
Definition: wordpad.c:45
z_streamp strm
Definition: inflate.c:195
if(dx==0 &&dy==0)
Definition: linetemp.h:174
#define Tracev(x)
Definition: inflate.c:43
int inflateStateCheck(z_streamp strm)
Definition: inflate.c:105
static int state
Definition: maze.c:121
#define Z_NULL
Definition: zlib.h:149
FILE * stderr
Definition: inflate.c:158
#define FAR
Definition: zlib.h:34

Referenced by inflateReset().

◆ inflateSetDictionary()

int ZEXPORT inflateSetDictionary ( z_streamp  strm,
const Bytef dictionary,
uInt  dictLength 
)

Definition at line 1338 of file inflate.c.

1342 {
1343  struct inflate_state FAR *state;
1344  unsigned long dictid;
1345  int ret;
1346 
1347  /* check state */
1348  if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
1349  state = (struct inflate_state FAR *)strm->state;
1350  if (state->wrap != 0 && state->mode != DICT)
1351  return Z_STREAM_ERROR;
1352 
1353  /* check for correct dictionary identifier */
1354  if (state->mode == DICT) {
1355  dictid = adler32(0L, Z_NULL, 0);
1356  dictid = adler32(dictid, dictionary, dictLength);
1357  if (dictid != state->check)
1358  return Z_DATA_ERROR;
1359  }
1360 
1361  /* copy dictionary to window using updatewindow(), which will amend the
1362  existing dictionary if appropriate */
1363  ret = updatewindow(strm, dictionary + dictLength, dictLength);
1364  if (ret) {
1365  state->mode = MEM;
1366  return Z_MEM_ERROR;
1367  }
1368  state->havedict = 1;
1369  Tracev((stderr, "inflate: dictionary set\n"));
1370  return Z_OK;
1371 }
#define Z_STREAM_ERROR
Definition: zlib.h:118
#define Z_OK
Definition: zlib.h:114
z_streamp strm
Definition: inflate.c:195
if(dx==0 &&dy==0)
Definition: linetemp.h:174
#define L(x)
Definition: ntvdm.h:50
#define Tracev(x)
Definition: inflate.c:43
int inflateStateCheck(z_streamp strm)
Definition: inflate.c:105
Definition: inflate.c:188
int ret
static int state
Definition: maze.c:121
int updatewindow(z_streamp strm, const Bytef *end, unsigned copy)
Definition: inflate.c:397
#define Z_NULL
Definition: zlib.h:149
Definition: inflate.c:168
#define Z_MEM_ERROR
Definition: zlib.h:120
#define Z_DATA_ERROR
Definition: zlib.h:119
FILE * stderr
#define FAR
Definition: zlib.h:34
uLong ZEXPORT adler32(uLong adler, const Bytef *buf, uInt len)
Definition: adler32.c:134

◆ inflateStateCheck()

int inflateStateCheck ( z_streamp  strm)

Definition at line 105 of file inflate.c.

107 {
108  struct inflate_state FAR *state;
109  if (strm == Z_NULL ||
110  strm->zalloc == (alloc_func)0 || strm->zfree == (free_func)0)
111  return 1;
112  state = (struct inflate_state FAR *)strm->state;
113  if (state == Z_NULL || state->strm != strm ||
114  state->mode < HEAD || state->mode > SYNC)
115  return 1;
116  return 0;
117 }
z_streamp strm
Definition: inflate.c:195
if(dx==0 &&dy==0)
Definition: linetemp.h:174
Definition: ntuser.h:179
void(* free_func)(voidpf opaque, voidpf address)
Definition: zlib.h:54
static int state
Definition: maze.c:121
#define Z_NULL
Definition: zlib.h:149
Definition: inflate.c:189
voidpf(* alloc_func)(voidpf opaque, uInt items, uInt size)
Definition: zlib.h:53
#define FAR
Definition: zlib.h:34

Referenced by inflate(), inflateCodesUsed(), inflateCopy(), inflateEnd(), inflateGetDictionary(), inflateGetHeader(), inflateMark(), inflatePrime(), inflateReset(), inflateReset2(), inflateResetKeep(), inflateSetDictionary(), inflateSync(), inflateSyncPoint(), inflateUndermine(), and inflateValidate().

◆ inflateSync()

int ZEXPORT inflateSync ( z_streamp  strm)

Definition at line 1424 of file inflate.c.

1426 {
1427  unsigned len; /* number of bytes to look at or looked at */
1428  int flags; /* temporary to save header status */
1429  unsigned long in, out; /* temporary to save total_in and total_out */
1430  unsigned char buf[4]; /* to restore bit buffer to byte string */
1431  struct inflate_state FAR *state;
1432 
1433  /* check parameters */
1434  if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
1435  state = (struct inflate_state FAR *)strm->state;
1436  if (strm->avail_in == 0 && state->bits < 8) return Z_BUF_ERROR;
1437 
1438  /* if first time, start search in bit buffer */
1439  if (state->mode != SYNC) {
1440  state->mode = SYNC;
1441  state->hold <<= state->bits & 7;
1442  state->bits -= state->bits & 7;
1443  len = 0;
1444  while (state->bits >= 8) {
1445  buf[len++] = (unsigned char)(state->hold);
1446  state->hold >>= 8;
1447  state->bits -= 8;
1448  }
1449  state->have = 0;
1450  syncsearch(&(state->have), buf, len);
1451  }
1452 
1453  /* search available input */
1454  len = syncsearch(&(state->have), strm->next_in, strm->avail_in);
1455  strm->avail_in -= len;
1456  strm->next_in += len;
1457  strm->total_in += len;
1458 
1459  /* return no joy or set up to restart inflate() on a new block */
1460  if (state->have != 4) return Z_DATA_ERROR;
1461  if (state->flags == -1)
1462  state->wrap = 0; /* if no header yet, treat as raw */
1463  else
1464  state->wrap &= ~4; /* no point in computing a check value now */
1465  flags = state->flags;
1466  in = strm->total_in; out = strm->total_out;
1467  inflateReset(strm);
1468  strm->total_in = in; strm->total_out = out;
1469  state->flags = flags;
1470  state->mode = TYPE;
1471  return Z_OK;
1472 }
unsigned syncsearch(unsigned FAR *have, const unsigned char FAR *buf, unsigned len)
Definition: inflate.c:1401
#define Z_STREAM_ERROR
Definition: zlib.h:118
#define Z_OK
Definition: zlib.h:114
z_streamp strm
Definition: inflate.c:195
int ZEXPORT inflateReset(z_streamp strm)
Definition: inflate.c:145
if(dx==0 &&dy==0)
Definition: linetemp.h:174
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
unsigned char
Definition: typeof.h:29
int inflateStateCheck(z_streamp strm)
Definition: inflate.c:105
Definition: inflate.c:169
static FILE * out
Definition: regtests2xml.c:44
GLbitfield flags
Definition: glext.h:7161
static int state
Definition: maze.c:121
GLenum GLsizei len
Definition: glext.h:6722
Definition: inflate.c:189
GLuint in
Definition: glext.h:9616
#define Z_BUF_ERROR
Definition: zlib.h:121
#define Z_DATA_ERROR
Definition: zlib.h:119
#define FAR
Definition: zlib.h:34

◆ inflateSyncPoint()

int ZEXPORT inflateSyncPoint ( z_streamp  strm)

Definition at line 1482 of file inflate.c.

1484 {
1485  struct inflate_state FAR *state;
1486 
1487  if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
1488  state = (struct inflate_state FAR *)strm->state;
1489  return state->mode == STORED && state->bits == 0;
1490 }
#define Z_STREAM_ERROR
Definition: zlib.h:118
z_streamp strm
Definition: inflate.c:195
int inflateStateCheck(z_streamp strm)
Definition: inflate.c:105
static int state
Definition: maze.c:121
#define FAR
Definition: zlib.h:34

◆ inflateUndermine()

int ZEXPORT inflateUndermine ( z_streamp  strm,
int  subvert 
)

Definition at line 1539 of file inflate.c.

1542 {
1543  struct inflate_state FAR *state;
1544 
1545  if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
1546  state = (struct inflate_state FAR *)strm->state;
1547 #ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
1548  state->sane = !subvert;
1549  return Z_OK;
1550 #else
1551  (void)subvert;
1552  state->sane = 1;
1553  return Z_DATA_ERROR;
1554 #endif
1555 }
#define Z_STREAM_ERROR
Definition: zlib.h:118
#define Z_OK
Definition: zlib.h:114
z_streamp strm
Definition: inflate.c:195
else
Definition: tritemp.h:161
int inflateStateCheck(z_streamp strm)
Definition: inflate.c:105
static int state
Definition: maze.c:121
#define Z_DATA_ERROR
Definition: zlib.h:119
#define FAR
Definition: zlib.h:34

◆ inflateValidate()

int ZEXPORT inflateValidate ( z_streamp  strm,
int  check 
)

Definition at line 1557 of file inflate.c.

1560 {
1561  struct inflate_state FAR *state;
1562 
1563  if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
1564  state = (struct inflate_state FAR *)strm->state;
1565  if (check && state->wrap)
1566  state->wrap |= 4;
1567  else
1568  state->wrap &= ~4;
1569  return Z_OK;
1570 }
#define Z_STREAM_ERROR
Definition: zlib.h:118
#define Z_OK
Definition: zlib.h:114
z_streamp strm
Definition: inflate.c:195
if(dx==0 &&dy==0)
Definition: linetemp.h:174
int inflateStateCheck(z_streamp strm)
Definition: inflate.c:105
void check(CONTEXT *pContext)
Definition: NtContinue.c:77
static int state
Definition: maze.c:121
#define FAR
Definition: zlib.h:34

◆ OF() [1/4]

int inflateStateCheck OF ( (z_streamp strm)  )

◆ OF() [2/4]

◆ OF() [3/4]

◆ OF() [4/4]

◆ syncsearch()

unsigned syncsearch ( unsigned FAR have,
const unsigned char FAR buf,
unsigned  len 
)

Definition at line 1401 of file inflate.c.

1405 {
1406  unsigned got;
1407  unsigned next;
1408 
1409  got = *have;
1410  next = 0;
1411  while (next < len && got < 4) {
1412  if ((int)(buf[next]) == (got < 2 ? 0 : 0xff))
1413  got++;
1414  else if (buf[next])
1415  got = 0;
1416  else
1417  got = 4 - got;
1418  next++;
1419  }
1420  *have = got;
1421  return next;
1422 }
unsigned have
Definition: inflate.c:229
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
GLenum GLsizei len
Definition: glext.h:6722
static unsigned __int64 next
Definition: rand_nt.c:6

Referenced by inflateSync().

◆ updatewindow()

int updatewindow ( z_streamp  strm,
const Bytef end,
unsigned  copy 
)

Definition at line 397 of file inflate.c.

401 {
402  struct inflate_state FAR *state;
403  unsigned dist;
404 
405  state = (struct inflate_state FAR *)strm->state;
406 
407  /* if it hasn't been done already, allocate space for the window */
408  if (state->window == Z_NULL) {
409  state->window = (unsigned char FAR *)
410  ZALLOC(strm, 1U << state->wbits,
411  sizeof(unsigned char));
412  if (state->window == Z_NULL) return 1;
413  }
414 
415  /* if window not in use yet, initialize */
416  if (state->wsize == 0) {
417  state->wsize = 1U << state->wbits;
418  state->wnext = 0;
419  state->whave = 0;
420  }
421 
422  /* copy state->wsize or less output bytes into the circular window */
423  if (copy >= state->wsize) {
424  zmemcpy(state->window, end - state->wsize, state->wsize);
425  state->wnext = 0;
426  state->whave = state->wsize;
427  }
428  else {
429  dist = state->wsize - state->wnext;
430  if (dist > copy) dist = copy;
431  zmemcpy(state->window + state->wnext, end - copy, dist);
432  copy -= dist;
433  if (copy) {
434  zmemcpy(state->window, end - copy, copy);
435  state->wnext = copy;
436  state->whave = state->wsize;
437  }
438  else {
439  state->wnext += dist;
440  if (state->wnext == state->wsize) state->wnext = 0;
441  if (state->whave < state->wsize) state->whave += dist;
442  }
443  }
444  return 0;
445 }
#define zmemcpy
Definition: inflate.c:33
#define U(x)
Definition: wordpad.c:45
z_streamp strm
Definition: inflate.c:195
if(dx==0 &&dy==0)
Definition: linetemp.h:174
GLuint GLuint end
Definition: gl.h:1545
static int state
Definition: maze.c:121
#define ZALLOC(strm, items, size)
Definition: inflate.c:49
#define Z_NULL
Definition: zlib.h:149
INT copy(TCHAR source[MAX_PATH], TCHAR dest[MAX_PATH], INT append, DWORD lpdwFlags, BOOL bTouch)
Definition: copy.c:51
#define FAR
Definition: zlib.h:34

Referenced by inflate(), and inflateSetDictionary().