Index: src/OFDeflateStream.m ================================================================== --- src/OFDeflateStream.m +++ src/OFDeflateStream.m @@ -422,11 +422,11 @@ if OF_LIKELY (CTX.value == 0xFE) { if OF_LIKELY (CTX.litLenCodesCount == 0xFF) { if OF_UNLIKELY (!tryReadBits(self, &bits, 5)) return bytesWritten; - if OF_UNLIKELY (bits > 30) + if OF_UNLIKELY (bits > 29) @throw [OFInvalidFormatException exception]; CTX.litLenCodesCount = bits; } @@ -440,14 +440,10 @@ if OF_LIKELY (CTX.codeLenCodesCount == 0xFF) { if OF_UNLIKELY (!tryReadBits(self, &bits, 4)) return bytesWritten; - if OF_UNLIKELY (bits + 4 > 19) - @throw [OFInvalidFormatException - exception]; - CTX.codeLenCodesCount = bits; } if OF_LIKELY (CTX.lengths == NULL) { CTX.lengths = [self allocMemoryWithSize: 19]; @@ -476,11 +472,11 @@ if OF_LIKELY (CTX.lengths == NULL) CTX.lengths = [self allocMemoryWithSize: CTX.litLenCodesCount + CTX.distCodesCount + 258]; for (i = CTX.receivedCount; - i < CTX.litLenCodesCount + CTX.distCodesCount + 258; i++) { + i < CTX.litLenCodesCount + CTX.distCodesCount + 258;) { uint_fast8_t j, count; if OF_LIKELY (CTX.value == 0xFF) { if OF_UNLIKELY (!walkTree(self, &CTX.treeIter, &value)) { @@ -489,11 +485,11 @@ } CTX.treeIter = CTX.codeLenTree; if (value < 16) { - CTX.lengths[i] = value; + CTX.lengths[i++] = value; continue; } } else value = CTX.value; @@ -543,11 +539,10 @@ CTX.litLenCodesCount + CTX.distCodesCount + 258) @throw [OFInvalidFormatException exception]; for (j = 0; j < count; j++) CTX.lengths[i++] = value; - i--; CTX.value = 0xFF; } releaseTree(CTX.codeLenTree); @@ -589,12 +584,12 @@ /* Avoid leaking data */ memset(_slidingWindow, 0, 0x8000); } _slidingWindow[_slidingWindowIndex] = CTX.value; - _slidingWindowIndex = (_slidingWindowIndex + - 1) & 0x7FFF; + _slidingWindowIndex = + (_slidingWindowIndex + 1) & 0x7FFF; CTX.state = AWAIT_CODE; CTX.treeIter = CTX.litLenTree; } @@ -709,12 +704,12 @@ /* Avoid leaking data */ memset(_slidingWindow, 0, 0x8000); } _slidingWindow[_slidingWindowIndex] = value; - _slidingWindowIndex = (_slidingWindowIndex + - 1) & 0x7FFF; + _slidingWindowIndex = + (_slidingWindowIndex + 1) & 0x7FFF; CTX.treeIter = CTX.litLenTree; continue; }