mirror of
https://github.com/mackron/miniaudio.git
synced 2026-04-22 00:06:59 +02:00
Update stb_vorbis.
This commit is contained in:
+19
-7
@@ -1,4 +1,4 @@
|
|||||||
// Ogg Vorbis audio decoder - v1.19 - public domain
|
// Ogg Vorbis audio decoder - v1.21 - public domain
|
||||||
// http://nothings.org/stb_vorbis/
|
// http://nothings.org/stb_vorbis/
|
||||||
//
|
//
|
||||||
// Original version written by Sean Barrett in 2007.
|
// Original version written by Sean Barrett in 2007.
|
||||||
@@ -31,9 +31,13 @@
|
|||||||
// Phillip Bennefall Rohit Thiago Goulart
|
// Phillip Bennefall Rohit Thiago Goulart
|
||||||
// github:manxorist saga musix github:infatum
|
// github:manxorist saga musix github:infatum
|
||||||
// Timur Gagiev Maxwell Koo Peter Waller
|
// Timur Gagiev Maxwell Koo Peter Waller
|
||||||
// github:audinowho Dougall Johnson
|
// github:audinowho Dougall Johnson David Reid
|
||||||
|
// github:Clownacy Pedro J. Estebanez Remi Verschelde
|
||||||
|
// AnthoFoxo
|
||||||
//
|
//
|
||||||
// Partial history:
|
// Partial history:
|
||||||
|
// 1.21 - 2021-07-02 - fix bug for files with no comments
|
||||||
|
// 1.20 - 2020-07-11 - several small fixes
|
||||||
// 1.19 - 2020-02-05 - warnings
|
// 1.19 - 2020-02-05 - warnings
|
||||||
// 1.18 - 2020-02-02 - fix seek bugs; parse header comments; misc warnings etc.
|
// 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)
|
// 1.17 - 2019-07-08 - fix CVE-2019-13217..CVE-2019-13223 (by ForAllSecure)
|
||||||
@@ -577,7 +581,7 @@ enum STBVorbisError
|
|||||||
#if defined(_MSC_VER) || defined(__MINGW32__)
|
#if defined(_MSC_VER) || defined(__MINGW32__)
|
||||||
#include <malloc.h>
|
#include <malloc.h>
|
||||||
#endif
|
#endif
|
||||||
#if defined(__linux__) || defined(__linux) || defined(__EMSCRIPTEN__)
|
#if defined(__linux__) || defined(__linux) || defined(__EMSCRIPTEN__) || defined(__NEWLIB__)
|
||||||
#include <alloca.h>
|
#include <alloca.h>
|
||||||
#endif
|
#endif
|
||||||
#else // STB_VORBIS_NO_CRT
|
#else // STB_VORBIS_NO_CRT
|
||||||
@@ -963,7 +967,7 @@ static void *setup_temp_malloc(vorb *f, int sz)
|
|||||||
static void setup_temp_free(vorb *f, void *p, int sz)
|
static void setup_temp_free(vorb *f, void *p, int sz)
|
||||||
{
|
{
|
||||||
if (f->alloc.alloc_buffer) {
|
if (f->alloc.alloc_buffer) {
|
||||||
f->temp_offset += (sz+3)&~3;
|
f->temp_offset += (sz+7)&~7;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
free(p);
|
free(p);
|
||||||
@@ -1602,7 +1606,8 @@ static uint32 get_bits(vorb *f, int n)
|
|||||||
f->valid_bits += 8;
|
f->valid_bits += 8;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (f->valid_bits < 0) return 0;
|
|
||||||
|
assert(f->valid_bits >= n);
|
||||||
z = f->acc & ((1 << n)-1);
|
z = f->acc & ((1 << n)-1);
|
||||||
f->acc >>= n;
|
f->acc >>= n;
|
||||||
f->valid_bits -= n;
|
f->valid_bits -= n;
|
||||||
@@ -3632,17 +3637,24 @@ static int start_decoder(vorb *f)
|
|||||||
//file vendor
|
//file vendor
|
||||||
len = get32_packet(f);
|
len = get32_packet(f);
|
||||||
f->vendor = (char*)setup_malloc(f, sizeof(char) * (len+1));
|
f->vendor = (char*)setup_malloc(f, sizeof(char) * (len+1));
|
||||||
|
if (f->vendor == NULL) return error(f, VORBIS_outofmem);
|
||||||
for(i=0; i < len; ++i) {
|
for(i=0; i < len; ++i) {
|
||||||
f->vendor[i] = get8_packet(f);
|
f->vendor[i] = get8_packet(f);
|
||||||
}
|
}
|
||||||
f->vendor[len] = (char)'\0';
|
f->vendor[len] = (char)'\0';
|
||||||
//user comments
|
//user comments
|
||||||
f->comment_list_length = get32_packet(f);
|
f->comment_list_length = get32_packet(f);
|
||||||
f->comment_list = (char**)setup_malloc(f, sizeof(char*) * (f->comment_list_length));
|
f->comment_list = NULL;
|
||||||
|
if (f->comment_list_length > 0)
|
||||||
|
{
|
||||||
|
f->comment_list = (char**) setup_malloc(f, sizeof(char*) * (f->comment_list_length));
|
||||||
|
if (f->comment_list == NULL) return error(f, VORBIS_outofmem);
|
||||||
|
}
|
||||||
|
|
||||||
for(i=0; i < f->comment_list_length; ++i) {
|
for(i=0; i < f->comment_list_length; ++i) {
|
||||||
len = get32_packet(f);
|
len = get32_packet(f);
|
||||||
f->comment_list[i] = (char*)setup_malloc(f, sizeof(char) * (len+1));
|
f->comment_list[i] = (char*)setup_malloc(f, sizeof(char) * (len+1));
|
||||||
|
if (f->comment_list[i] == NULL) return error(f, VORBIS_outofmem);
|
||||||
|
|
||||||
for(j=0; j < len; ++j) {
|
for(j=0; j < len; ++j) {
|
||||||
f->comment_list[i][j] = get8_packet(f);
|
f->comment_list[i][j] = get8_packet(f);
|
||||||
@@ -4255,7 +4267,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
|
memset(p, 0, sizeof(*p)); // NULL out all malloc'd pointers to start
|
||||||
if (z) {
|
if (z) {
|
||||||
p->alloc = *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->temp_offset = p->alloc.alloc_buffer_length_in_bytes;
|
||||||
}
|
}
|
||||||
p->eof = 0;
|
p->eof = 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user