summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Daede <daede003@umn.edu>2018-05-23 15:23:09 -0700
committerThomas Daede <daede003@umn.edu>2018-05-23 15:23:09 -0700
commitea8b03fce93444cb3cf0131909e15b4f8856e863 (patch)
tree77f97552900854fcde0a0e2af1896afd69205976
parent2ebe99946f91ee879c2a4991e2588a0324d2ed42 (diff)
downloadlibvorbis-git-ea8b03fce93444cb3cf0131909e15b4f8856e863.tar.gz
Fix shift by negative value when reading blocksize.
-rw-r--r--lib/info.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/lib/info.c b/lib/info.c
index 3fbb7c75..23efa25c 100644
--- a/lib/info.c
+++ b/lib/info.c
@@ -203,6 +203,7 @@ void vorbis_info_clear(vorbis_info *vi){
static int _vorbis_unpack_info(vorbis_info *vi,oggpack_buffer *opb){
codec_setup_info *ci=vi->codec_setup;
+ int bs;
if(!ci)return(OV_EFAULT);
vi->version=oggpack_read(opb,32);
@@ -215,8 +216,12 @@ static int _vorbis_unpack_info(vorbis_info *vi,oggpack_buffer *opb){
vi->bitrate_nominal=(ogg_int32_t)oggpack_read(opb,32);
vi->bitrate_lower=(ogg_int32_t)oggpack_read(opb,32);
- ci->blocksizes[0]=1<<oggpack_read(opb,4);
- ci->blocksizes[1]=1<<oggpack_read(opb,4);
+ bs = oggpack_read(opb,4);
+ if(bs<0)goto err_out;
+ ci->blocksizes[0]=1<<bs;
+ bs = oggpack_read(opb,4);
+ if(bs<0)goto err_out;
+ ci->blocksizes[1]=1<<bs;
if(vi->rate<1)goto err_out;
if(vi->channels<1)goto err_out;