}
Z_INTERNAL void slide_hash_armv6(deflate_state *s) {
- unsigned int wsize = s->w_size;
+ Assert(s->w_size <= UINT16_MAX, "w_size should fit in uint16_t");
+ uint16_t wsize = (uint16_t)s->w_size;
slide_hash_chain(s->head, HASH_SIZE, wsize);
slide_hash_chain(s->prev, wsize, wsize);
}
Z_INTERNAL void slide_hash_neon(deflate_state *s) {
- unsigned int wsize = s->w_size;
+ Assert(s->w_size <= UINT16_MAX, "w_size should fit in uint16_t");
+ uint16_t wsize = (uint16_t)s->w_size;
slide_hash_chain(s->head, HASH_SIZE, wsize);
slide_hash_chain(s->prev, wsize, wsize);
#endif
#endif
words += N;
+ Assert(comb <= UINT32_MAX, "comb should fit in uint32_t");
c = (uint32_t)ZSWAPWORD(comb);
/* Update the pointer to the remaining bytes to process. */
}
void Z_INTERNAL SLIDE_PPC(deflate_state *s) {
- uint16_t wsize = s->w_size;
+ Assert(s->w_size <= UINT16_MAX, "w_size should fit in uint16_t");
+ uint16_t wsize = (uint16_t)s->w_size;
slide_hash_chain(s->head, HASH_SIZE, wsize);
slide_hash_chain(s->prev, wsize, wsize);
}
Z_INTERNAL void slide_hash_rvv(deflate_state *s) {
+ Assert(s->w_size <= UINT16_MAX, "w_size should fit in uint16_t");
uint16_t wsize = (uint16_t)s->w_size;
slide_hash_chain(s->head, HASH_SIZE, wsize);
}
Z_INTERNAL void slide_hash_avx2(deflate_state *s) {
+ Assert(s->w_size <= UINT16_MAX, "w_size should fit in uint16_t");
uint16_t wsize = (uint16_t)s->w_size;
const __m256i ymm_wsize = _mm256_set1_epi16((short)wsize);
}
Z_INTERNAL void slide_hash_sse2(deflate_state *s) {
+ Assert(s->w_size <= UINT16_MAX, "w_size should fit in uint16_t");
uint16_t wsize = (uint16_t)s->w_size;
const __m128i xmm_wsize = _mm_set1_epi16((short)wsize);
/* Define sizes */
int window_size = DEFLATE_ADJUST_WINDOW_SIZE((1 << windowBits) * 2);
- int prev_size = (1 << windowBits) * sizeof(Pos);
+ int prev_size = (1 << windowBits) * (int)sizeof(Pos);
int head_size = HASH_SIZE * sizeof(Pos);
int pending_size = lit_bufsize * LIT_BUFS;
int state_size = sizeof(deflate_state);
}
if (match_len >= WANT_MIN_MATCH) {
- check_match(s, s->strstart, s->match_start, match_len);
+ Assert(s->strstart <= UINT16_MAX, "strstart should fit in uint16_t");
+ Assert(s->match_start <= UINT16_MAX, "match_start should fit in uint16_t");
+ check_match(s, (Pos)s->strstart, (Pos)s->match_start, match_len);
bflush = zng_tr_tally_dist(s, s->strstart - s->match_start, match_len - STD_MIN_MATCH);
/* dist: distance of matched string */
/* len: match length-STD_MIN_MATCH */
#ifdef LIT_MEM
- s->d_buf[s->sym_next] = dist;
- s->l_buf[s->sym_next++] = len;
+ Assert(dist <= UINT16_MAX, "dist should fit in uint16_t");
+ Assert(len <= UINT8_MAX, "len should fit in uint8_t");
+ s->d_buf[s->sym_next] = (uint16_t)dist;
+ s->l_buf[s->sym_next++] = (uint8_t)len;
#else
s->sym_buf[s->sym_next++] = (uint8_t)(dist);
s->sym_buf[s->sym_next++] = (uint8_t)(dist >> 8);
if (UNLIKELY(match_len > STD_MAX_MATCH))
match_len = STD_MAX_MATCH;
- check_match(s, s->strstart, hash_head, match_len);
+ Assert(s->strstart <= UINT16_MAX, "strstart should fit in uint16_t");
+ check_match(s, (Pos)s->strstart, hash_head, match_len);
zng_tr_emit_dist(s, static_ltree, static_dtree, match_len - STD_MIN_MATCH, (uint32_t)dist);
s->lookahead -= match_len;
/* Emit match if have run of STD_MIN_MATCH or longer, else emit literal */
if (match_len >= STD_MIN_MATCH) {
- check_match(s, s->strstart, s->strstart - 1, match_len);
+ Assert(s->strstart <= UINT16_MAX, "strstart should fit in uint16_t");
+ check_match(s, (Pos)s->strstart, (Pos)(s->strstart - 1), match_len);
bflush = zng_tr_tally_dist(s, 1, match_len - STD_MIN_MATCH);
unsigned int max_insert = s->strstart + s->lookahead - STD_MIN_MATCH;
/* Do not insert strings in hash table beyond this. */
- check_match(s, s->strstart-1, s->prev_match, s->prev_length);
+ Assert((s->strstart-1) <= UINT16_MAX, "strstart-1 should fit in uint16_t");
+ check_match(s, (Pos)(s->strstart - 1), s->prev_match, s->prev_length);
bflush = zng_tr_tally_dist(s, s->strstart -1 - s->prev_match, s->prev_length - STD_MIN_MATCH);