mirror of
https://github.com/Redot-Engine/redot-engine.git
synced 2025-12-06 07:17:42 -05:00
libvorbis: Sync with upstream 1.3.7
Fixes various bugs, including several ones with security relevance. Changes: https://github.com/xiph/vorbis/releases/tag/v1.3.7
This commit is contained in:
25
thirdparty/libvorbis/vorbisfile.c
vendored
25
thirdparty/libvorbis/vorbisfile.c
vendored
@@ -6,7 +6,7 @@
|
||||
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
|
||||
* *
|
||||
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2015 *
|
||||
* by the Xiph.Org Foundation http://www.xiph.org/ *
|
||||
* by the Xiph.Org Foundation https://xiph.org/ *
|
||||
* *
|
||||
********************************************************************
|
||||
|
||||
@@ -264,6 +264,10 @@ static ogg_int64_t _get_prev_page_serial(OggVorbis_File *vf, ogg_int64_t begin,
|
||||
}
|
||||
}
|
||||
}
|
||||
/*We started from the beginning of the stream and found nothing.
|
||||
This should be impossible unless the contents of the stream changed out
|
||||
from under us after we read from it.*/
|
||||
if(!begin&&vf->offset<0)return OV_EBADLINK;
|
||||
}
|
||||
|
||||
/* we're not interested in the page... just the serialno and granpos. */
|
||||
@@ -1230,7 +1234,6 @@ double ov_time_total(OggVorbis_File *vf,int i){
|
||||
|
||||
int ov_raw_seek(OggVorbis_File *vf,ogg_int64_t pos){
|
||||
ogg_stream_state work_os;
|
||||
int ret;
|
||||
|
||||
if(vf->ready_state<OPENED)return(OV_EINVAL);
|
||||
if(!vf->seekable)
|
||||
@@ -1253,8 +1256,12 @@ int ov_raw_seek(OggVorbis_File *vf,ogg_int64_t pos){
|
||||
vf->current_serialno); /* must set serialno */
|
||||
vorbis_synthesis_restart(&vf->vd);
|
||||
|
||||
ret=_seek_helper(vf,pos);
|
||||
if(ret)goto seek_error;
|
||||
if(_seek_helper(vf,pos)) {
|
||||
/* dump the machine so we're in a known state */
|
||||
vf->pcm_offset=-1;
|
||||
_decode_clear(vf);
|
||||
return OV_EBADLINK;
|
||||
}
|
||||
|
||||
/* we need to make sure the pcm_offset is set, but we don't want to
|
||||
advance the raw cursor past good packets just to get to the first
|
||||
@@ -1388,13 +1395,6 @@ int ov_raw_seek(OggVorbis_File *vf,ogg_int64_t pos){
|
||||
vf->bittrack=0.f;
|
||||
vf->samptrack=0.f;
|
||||
return(0);
|
||||
|
||||
seek_error:
|
||||
/* dump the machine so we're in a known state */
|
||||
vf->pcm_offset=-1;
|
||||
ogg_stream_clear(&work_os);
|
||||
_decode_clear(vf);
|
||||
return OV_EBADLINK;
|
||||
}
|
||||
|
||||
/* Page granularity seek (faster than sample granularity because we
|
||||
@@ -1964,6 +1964,7 @@ long ov_read_filter(OggVorbis_File *vf,char *buffer,int length,
|
||||
long samples;
|
||||
|
||||
if(vf->ready_state<OPENED)return(OV_EINVAL);
|
||||
if(word<=0)return(OV_EINVAL);
|
||||
|
||||
while(1){
|
||||
if(vf->ready_state==INITSET){
|
||||
@@ -1989,6 +1990,8 @@ long ov_read_filter(OggVorbis_File *vf,char *buffer,int length,
|
||||
long channels=ov_info(vf,-1)->channels;
|
||||
long bytespersample=word * channels;
|
||||
vorbis_fpu_control fpu;
|
||||
|
||||
if(channels<1||channels>255)return(OV_EINVAL);
|
||||
if(samples>length/bytespersample)samples=length/bytespersample;
|
||||
|
||||
if(samples <= 0)
|
||||
|
||||
Reference in New Issue
Block a user