|
@@ -1,4 +1,4 @@
|
|
|
-// Ogg Vorbis audio decoder - v1.19 - public domain
|
|
|
+// Ogg Vorbis audio decoder - v1.20 - public domain
|
|
|
// http://nothings.org/stb_vorbis/
|
|
|
//
|
|
|
// Original version written by Sean Barrett in 2007.
|
|
@@ -31,9 +31,11 @@
|
|
|
// Phillip Bennefall Rohit Thiago Goulart
|
|
|
// github:manxorist saga musix github:infatum
|
|
|
// Timur Gagiev Maxwell Koo Peter Waller
|
|
|
-// github:audinowho Dougall Johnson
|
|
|
+// github:audinowho Dougall Johnson David Reid
|
|
|
+// github:Clownacy Pedro J. Estebanez Remi Verschelde
|
|
|
//
|
|
|
// Partial history:
|
|
|
+// 1.20 - 2020-07-11 - several small fixes
|
|
|
// 1.19 - 2020-02-05 - warnings
|
|
|
// 1.18 - 2020-02-02 - fix seek bugs; parse header comments; misc warnings etc.
|
|
|
// 1.17 - 2019-07-08 - fix CVE-2019-13217..CVE-2019-13223 (by ForAllSecure)
|
|
@@ -577,7 +579,7 @@ enum STBVorbisError
|
|
|
#if defined(_MSC_VER) || defined(__MINGW32__)
|
|
|
#include <malloc.h>
|
|
|
#endif
|
|
|
- #if defined(__linux__) || defined(__linux) || defined(__EMSCRIPTEN__)
|
|
|
+ #if defined(__linux__) || defined(__linux) || defined(__EMSCRIPTEN__) || defined(__NEWLIB__)
|
|
|
#include <alloca.h>
|
|
|
#endif
|
|
|
#else // STB_VORBIS_NO_CRT
|
|
@@ -599,7 +601,9 @@ enum STBVorbisError
|
|
|
#undef __forceinline
|
|
|
#endif
|
|
|
#define __forceinline
|
|
|
+ #ifndef alloca
|
|
|
#define alloca __builtin_alloca
|
|
|
+ #endif
|
|
|
#elif !defined(_MSC_VER)
|
|
|
#if __GNUC__
|
|
|
#define __forceinline inline
|
|
@@ -1600,7 +1604,8 @@ static uint32 get_bits(vorb *f, int n)
|
|
|
f->valid_bits += 8;
|
|
|
}
|
|
|
}
|
|
|
- if (f->valid_bits < 0) return 0;
|
|
|
+
|
|
|
+ assert(f->valid_bits >= n);
|
|
|
z = f->acc & ((1 << n)-1);
|
|
|
f->acc >>= n;
|
|
|
f->valid_bits -= n;
|
|
@@ -4256,7 +4261,7 @@ static void vorbis_init(stb_vorbis *p, const stb_vorbis_alloc *z)
|
|
|
memset(p, 0, sizeof(*p)); // NULL out all malloc'd pointers to start
|
|
|
if (z) {
|
|
|
p->alloc = *z;
|
|
|
- p->alloc.alloc_buffer_length_in_bytes = (p->alloc.alloc_buffer_length_in_bytes+3) & ~3;
|
|
|
+ p->alloc.alloc_buffer_length_in_bytes &= ~7;
|
|
|
p->temp_offset = p->alloc.alloc_buffer_length_in_bytes;
|
|
|
}
|
|
|
p->eof = 0;
|