summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorRay <[email protected]>2023-10-22 10:27:22 +0200
committerRay <[email protected]>2023-10-22 10:27:22 +0200
commitc4fb6c8517d8480afffafdff81155dd35a600f73 (patch)
treedd283107feb6a5506874b1d2750dc1c299f8b7b2 /src
parent1aad6a2fc0eb35c9aff845c84b2a4d798be67b27 (diff)
downloadraylib-c4fb6c8517d8480afffafdff81155dd35a600f73.tar.gz
raylib-c4fb6c8517d8480afffafdff81155dd35a600f73.zip
REVIEWED: sinfl, fix #3349
Diffstat (limited to 'src')
-rw-r--r--src/external/sinfl.h38
1 files changed, 28 insertions, 10 deletions
diff --git a/src/external/sinfl.h b/src/external/sinfl.h
index 8979fcd7..03f0b153 100644
--- a/src/external/sinfl.h
+++ b/src/external/sinfl.h
@@ -5,6 +5,8 @@ which implements the Deflate (RFC 1951) compressed data format specification sta
It is mainly tuned to get as much speed and compression ratio from as little code
as needed to keep the implementation as concise as possible.
+@raysan5: this file has been reviewed as per https://github.com/raysan5/raylib/issues/3349
+
## Features
- Portable single header and source file duo written in ANSI C (ISO C90)
- Dual license with either MIT or public domain
@@ -122,6 +124,7 @@ extern "C" {
struct sinfl {
const unsigned char *bitptr;
+ const unsigned char *bitend; // @raysan5, added
unsigned long long bitbuf;
int bitcnt;
@@ -177,17 +180,23 @@ sinfl_bsr(unsigned n) {
return 31 - __builtin_clz(n);
#endif
}
-static unsigned long long
-sinfl_read64(const void *p) {
- unsigned long long n;
- memcpy(&n, p, 8);
- return n;
-}
+// @raysan5, commented
+//static unsigned long long
+//sinfl_read64(const void *p) {
+// unsigned long long n;
+// memcpy(&n, p, 8);
+// return n;
+//}
static void
sinfl_copy64(unsigned char **dst, unsigned char **src) {
- unsigned long long n;
- memcpy(&n, *src, 8);
- memcpy(*dst, &n, 8);
+ // @raysan5, reviewed
+ //----------------------------
+ //unsigned long long n;
+ //memcpy(&n, *src, 8);
+ //memcpy(*dst, &n, 8);
+ memcpy(*dst, *src, 8);
+ //----------------------------
+
*dst += 8, *src += 8;
}
static unsigned char*
@@ -210,7 +219,14 @@ sinfl_copy128(unsigned char **dst, unsigned char **src) {
#endif
static void
sinfl_refill(struct sinfl *s) {
- s->bitbuf |= sinfl_read64(s->bitptr) << s->bitcnt;
+ // @raysan5, reviewed
+ //---------------------------------------------------
+ //s->bitbuf |= sinfl_read64(s->bitptr) << s->bitcnt;
+ unsigned long long n = 0;
+ memcpy(&n, p, s->bitptr + 8 < s->bitend ? 8 : s->bitend - s->bitptr);
+ s->bitbuf |= n << s->bitcnt;
+ //---------------------------------------------------
+
s->bitptr += (63 - s->bitcnt) >> 3;
s->bitcnt |= 56; /* bitcount in range [56,63] */
}
@@ -384,6 +400,8 @@ sinfl_decompress(unsigned char *out, int cap, const unsigned char *in, int size)
int last = 0;
s.bitptr = in;
+ s.bitend = e; // @raysan5, added
+
while (1) {
switch (state) {
case hdr: {