@@ -122,6 +122,7 @@ extern "C" {
122
122
123
123
struct sinfl {
124
124
const unsigned char * bitptr ;
125
+ const unsigned char * bitend ; // @raysan5: added
125
126
unsigned long long bitbuf ;
126
127
int bitcnt ;
127
128
@@ -185,9 +186,10 @@ sinfl_read64(const void *p) {
185
186
}
186
187
static void
187
188
sinfl_copy64 (unsigned char * * dst , unsigned char * * src ) {
188
- unsigned long long n ;
189
- memcpy (& n , * src , 8 );
190
- memcpy (* dst , & n , 8 );
189
+ //unsigned long long n;
190
+ //memcpy(&n, *src, 8);
191
+ //memcpy(*dst, &n, 8);
192
+ memcpy (* dst , * src , 8 ); // @raysan5
191
193
* dst += 8 , * src += 8 ;
192
194
}
193
195
static unsigned char *
@@ -210,9 +212,22 @@ sinfl_copy128(unsigned char **dst, unsigned char **src) {
210
212
#endif
211
213
static void
212
214
sinfl_refill (struct sinfl * s ) {
213
- s -> bitbuf |= sinfl_read64 (s -> bitptr ) << s -> bitcnt ;
214
- s -> bitptr += (63 - s -> bitcnt ) >> 3 ;
215
- s -> bitcnt |= 56 ; /* bitcount in range [56,63] */
215
+ if (s -> bitend - s -> bitptr >= 8 ) {
216
+ // @raysan5: original code, only those 3 lines
217
+ s -> bitbuf |= sinfl_read64 (s -> bitptr ) << s -> bitcnt ;
218
+ s -> bitptr += (63 - s -> bitcnt ) >> 3 ;
219
+ s -> bitcnt |= 56 ; /* bitcount in range [56,63] */
220
+ } else {
221
+ // @raysan5: added this case when bits remaining < 8
222
+ int bitswant = 63 - s -> bitcnt ;
223
+ int byteswant = bitswant >> 3 ;
224
+ int bytesuse = s -> bitend - s -> bitptr <= byteswant ? (int )(s -> bitend - s -> bitptr ) : byteswant ;
225
+ unsigned long long n = 0 ;
226
+ memcpy (& n , s -> bitptr , bytesuse );
227
+ s -> bitbuf |= n << s -> bitcnt ;
228
+ s -> bitptr += bytesuse ;
229
+ s -> bitcnt += bytesuse << 3 ;
230
+ }
216
231
}
217
232
static int
218
233
sinfl_peek (struct sinfl * s , int cnt ) {
@@ -384,6 +399,7 @@ sinfl_decompress(unsigned char *out, int cap, const unsigned char *in, int size)
384
399
int last = 0 ;
385
400
386
401
s .bitptr = in ;
402
+ s .bitend = e ; // @raysan5: added
387
403
while (1 ) {
388
404
switch (state ) {
389
405
case hdr : {
0 commit comments