-
Notifications
You must be signed in to change notification settings - Fork 4.8k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
f4e5207
commit 735a61b
Showing
2 changed files
with
210 additions
and
0 deletions.
There are no files selected for viewing
136 changes: 136 additions & 0 deletions
136
src/native/external/patches/zlib-ng/0001-Add-aserts-and-casts-to-slide_hash.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,136 @@ | ||
From e2106cd3e5771690867d826e525e4ad80619d76b Mon Sep 17 00:00:00 2001 | ||
From: =?UTF-8?q?Carlos=20S=C3=A1nchez=20L=C3=B3pez?= | ||
<1175054+carlossanlop@users.noreply.github.com> | ||
Date: Wed, 24 Jul 2024 18:43:38 -0700 | ||
Subject: [PATCH 1/2] Add aserts and casts to slide_hash* | ||
|
||
--- | ||
src/native/external/zlib-ng/arch/arm/slide_hash_armv6.c | 4 +++- | ||
src/native/external/zlib-ng/arch/arm/slide_hash_neon.c | 4 +++- | ||
src/native/external/zlib-ng/arch/power/slide_ppc_tpl.h | 4 +++- | ||
src/native/external/zlib-ng/arch/riscv/slide_hash_rvv.c | 2 ++ | ||
src/native/external/zlib-ng/arch/x86/slide_hash_avx2.c | 2 ++ | ||
src/native/external/zlib-ng/arch/x86/slide_hash_sse2.c | 1 + | ||
6 files changed, 14 insertions(+), 3 deletions(-) | ||
|
||
diff --git a/src/native/external/zlib-ng/arch/arm/slide_hash_armv6.c b/src/native/external/zlib-ng/arch/arm/slide_hash_armv6.c | ||
index 0a2eeccf926..ef226fad5d4 100644 | ||
--- a/src/native/external/zlib-ng/arch/arm/slide_hash_armv6.c | ||
+++ b/src/native/external/zlib-ng/arch/arm/slide_hash_armv6.c | ||
@@ -7,6 +7,7 @@ | ||
#include "acle_intrins.h" | ||
#include "../../zbuild.h" | ||
#include "../../deflate.h" | ||
+#include <assert.h> | ||
|
||
/* SIMD version of hash_chain rebase */ | ||
static inline void slide_hash_chain(Pos *table, uint32_t entries, uint16_t wsize) { | ||
@@ -39,7 +40,8 @@ static inline void slide_hash_chain(Pos *table, uint32_t entries, uint16_t wsize | ||
} | ||
|
||
Z_INTERNAL void slide_hash_armv6(deflate_state *s) { | ||
- unsigned int wsize = s->w_size; | ||
+ assert(s->w_size <= _UI16_MAX); | ||
+ uint16_t wsize = (uint16_t)s->w_size; | ||
|
||
slide_hash_chain(s->head, HASH_SIZE, wsize); | ||
slide_hash_chain(s->prev, wsize, wsize); | ||
diff --git a/src/native/external/zlib-ng/arch/arm/slide_hash_neon.c b/src/native/external/zlib-ng/arch/arm/slide_hash_neon.c | ||
index a96ca11799b..b9574a308e0 100644 | ||
--- a/src/native/external/zlib-ng/arch/arm/slide_hash_neon.c | ||
+++ b/src/native/external/zlib-ng/arch/arm/slide_hash_neon.c | ||
@@ -12,6 +12,7 @@ | ||
#include "neon_intrins.h" | ||
#include "../../zbuild.h" | ||
#include "../../deflate.h" | ||
+#include <assert.h> | ||
|
||
/* SIMD version of hash_chain rebase */ | ||
static inline void slide_hash_chain(Pos *table, uint32_t entries, uint16_t wsize) { | ||
@@ -38,7 +39,8 @@ static inline void slide_hash_chain(Pos *table, uint32_t entries, uint16_t wsize | ||
} | ||
|
||
Z_INTERNAL void slide_hash_neon(deflate_state *s) { | ||
- unsigned int wsize = s->w_size; | ||
+ assert(s->w_size <= _UI16_MAX); | ||
+ uint16_t wsize = (uint16_t)s->w_size; | ||
|
||
slide_hash_chain(s->head, HASH_SIZE, wsize); | ||
slide_hash_chain(s->prev, wsize, wsize); | ||
diff --git a/src/native/external/zlib-ng/arch/power/slide_ppc_tpl.h b/src/native/external/zlib-ng/arch/power/slide_ppc_tpl.h | ||
index 5c17e38fb31..44c61c27da1 100644 | ||
--- a/src/native/external/zlib-ng/arch/power/slide_ppc_tpl.h | ||
+++ b/src/native/external/zlib-ng/arch/power/slide_ppc_tpl.h | ||
@@ -6,6 +6,7 @@ | ||
#include <altivec.h> | ||
#include "zbuild.h" | ||
#include "deflate.h" | ||
+#include <assert.h> | ||
|
||
static inline void slide_hash_chain(Pos *table, uint32_t entries, uint16_t wsize) { | ||
const vector unsigned short vmx_wsize = vec_splats(wsize); | ||
@@ -24,7 +25,8 @@ static inline void slide_hash_chain(Pos *table, uint32_t entries, uint16_t wsize | ||
} | ||
|
||
void Z_INTERNAL SLIDE_PPC(deflate_state *s) { | ||
- uint16_t wsize = s->w_size; | ||
+ assert(s->w_size <= _UI16_MAX); | ||
+ uint16_t wsize = (uint16_t)s->w_size; | ||
|
||
slide_hash_chain(s->head, HASH_SIZE, wsize); | ||
slide_hash_chain(s->prev, wsize, wsize); | ||
diff --git a/src/native/external/zlib-ng/arch/riscv/slide_hash_rvv.c b/src/native/external/zlib-ng/arch/riscv/slide_hash_rvv.c | ||
index 1164e89ba25..2e758742373 100644 | ||
--- a/src/native/external/zlib-ng/arch/riscv/slide_hash_rvv.c | ||
+++ b/src/native/external/zlib-ng/arch/riscv/slide_hash_rvv.c | ||
@@ -10,6 +10,7 @@ | ||
|
||
#include "../../zbuild.h" | ||
#include "../../deflate.h" | ||
+#include <assert.h> | ||
|
||
static inline void slide_hash_chain(Pos *table, uint32_t entries, uint16_t wsize) { | ||
size_t vl; | ||
@@ -25,6 +26,7 @@ static inline void slide_hash_chain(Pos *table, uint32_t entries, uint16_t wsize | ||
} | ||
|
||
Z_INTERNAL void slide_hash_rvv(deflate_state *s) { | ||
+ assert(s->w_size <= _UI16_MAX); | ||
uint16_t wsize = (uint16_t)s->w_size; | ||
|
||
slide_hash_chain(s->head, HASH_SIZE, wsize); | ||
diff --git a/src/native/external/zlib-ng/arch/x86/slide_hash_avx2.c b/src/native/external/zlib-ng/arch/x86/slide_hash_avx2.c | ||
index 94fe10c7bf4..144b5672940 100644 | ||
--- a/src/native/external/zlib-ng/arch/x86/slide_hash_avx2.c | ||
+++ b/src/native/external/zlib-ng/arch/x86/slide_hash_avx2.c | ||
@@ -13,6 +13,7 @@ | ||
#include "../../deflate.h" | ||
|
||
#include <immintrin.h> | ||
+#include <assert.h> | ||
|
||
static inline void slide_hash_chain(Pos *table, uint32_t entries, const __m256i wsize) { | ||
table += entries; | ||
@@ -31,6 +32,7 @@ static inline void slide_hash_chain(Pos *table, uint32_t entries, const __m256i | ||
} | ||
|
||
Z_INTERNAL void slide_hash_avx2(deflate_state *s) { | ||
+ assert(s->w_size <= _UI16_MAX); | ||
uint16_t wsize = (uint16_t)s->w_size; | ||
const __m256i ymm_wsize = _mm256_set1_epi16((short)wsize); | ||
|
||
diff --git a/src/native/external/zlib-ng/arch/x86/slide_hash_sse2.c b/src/native/external/zlib-ng/arch/x86/slide_hash_sse2.c | ||
index 5daac4a7398..04db335e3de 100644 | ||
--- a/src/native/external/zlib-ng/arch/x86/slide_hash_sse2.c | ||
+++ b/src/native/external/zlib-ng/arch/x86/slide_hash_sse2.c | ||
@@ -52,6 +52,7 @@ next_chain: | ||
} | ||
|
||
Z_INTERNAL void slide_hash_sse2(deflate_state *s) { | ||
+ assert(s->w_size <= _UI16_MAX); | ||
uint16_t wsize = (uint16_t)s->w_size; | ||
const __m128i xmm_wsize = _mm_set1_epi16((short)wsize); | ||
|
||
-- | ||
2.45.2.windows.1 | ||
|
74 changes: 74 additions & 0 deletions
74
src/native/external/patches/zlib-ng/0002-Add-asserts-and-casts-to-check_match.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,74 @@ | ||
From 51c39e062b7df96a789da1818c3e2446e9f60d64 Mon Sep 17 00:00:00 2001 | ||
From: =?UTF-8?q?Carlos=20S=C3=A1nchez=20L=C3=B3pez?= | ||
<1175054+carlossanlop@users.noreply.github.com> | ||
Date: Wed, 24 Jul 2024 18:44:08 -0700 | ||
Subject: [PATCH 2/2] Add asserts and casts to check_match | ||
|
||
--- | ||
src/native/external/zlib-ng/deflate_fast.c | 4 +++- | ||
src/native/external/zlib-ng/deflate_quick.c | 3 ++- | ||
src/native/external/zlib-ng/deflate_rle.c | 4 +++- | ||
src/native/external/zlib-ng/deflate_slow.c | 3 ++- | ||
4 files changed, 10 insertions(+), 4 deletions(-) | ||
|
||
diff --git a/src/native/external/zlib-ng/deflate_fast.c b/src/native/external/zlib-ng/deflate_fast.c | ||
index 3184aa718c7..6c6e227136b 100644 | ||
--- a/src/native/external/zlib-ng/deflate_fast.c | ||
+++ b/src/native/external/zlib-ng/deflate_fast.c | ||
@@ -58,7 +58,9 @@ Z_INTERNAL block_state deflate_fast(deflate_state *s, int flush) { | ||
} | ||
|
||
if (match_len >= WANT_MIN_MATCH) { | ||
- check_match(s, s->strstart, s->match_start, match_len); | ||
+ Assert(s->strstart <= _UI16_MAX,"strstart should fit in uint16_t"); | ||
+ Assert(s->match_start <= _UI16_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); | ||
|
||
diff --git a/src/native/external/zlib-ng/deflate_quick.c b/src/native/external/zlib-ng/deflate_quick.c | ||
index df5a17b9e66..8dd32ae32a9 100644 | ||
--- a/src/native/external/zlib-ng/deflate_quick.c | ||
+++ b/src/native/external/zlib-ng/deflate_quick.c | ||
@@ -102,7 +102,8 @@ Z_INTERNAL block_state deflate_quick(deflate_state *s, int flush) { | ||
if (UNLIKELY(match_len > STD_MAX_MATCH)) | ||
match_len = STD_MAX_MATCH; | ||
|
||
- check_match(s, s->strstart, hash_head, match_len); | ||
+ Assert(s->strstart <= _UI16_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; | ||
diff --git a/src/native/external/zlib-ng/deflate_rle.c b/src/native/external/zlib-ng/deflate_rle.c | ||
index cd085099460..cf1f3bf4bba 100644 | ||
--- a/src/native/external/zlib-ng/deflate_rle.c | ||
+++ b/src/native/external/zlib-ng/deflate_rle.c | ||
@@ -58,7 +58,9 @@ Z_INTERNAL block_state deflate_rle(deflate_state *s, int flush) { | ||
|
||
/* 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 <= _UI16_MAX,"strstart should fit in uint16_t"); | ||
+ Assert(s->match_start <= _UI16_MAX,"match_start 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); | ||
|
||
diff --git a/src/native/external/zlib-ng/deflate_slow.c b/src/native/external/zlib-ng/deflate_slow.c | ||
index 9f1c913467b..b71c0e5a331 100644 | ||
--- a/src/native/external/zlib-ng/deflate_slow.c | ||
+++ b/src/native/external/zlib-ng/deflate_slow.c | ||
@@ -78,7 +78,8 @@ Z_INTERNAL block_state deflate_slow(deflate_state *s, int flush) { | ||
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) <= _UI16_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); | ||
|
||
-- | ||
2.45.2.windows.1 | ||
|