summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJörn Heusipp <osmanx@problemloesungsmaschine.de>2017-07-22 08:29:35 +0200
committerTimothy B. Terriberry <tterribe@xiph.org>2017-07-22 00:21:38 -0700
commit68ebc894325f56ae1d860d49626419cf66ea171b (patch)
tree88c3f0a152b58ba87e3915aac239e99f8e93acb5
parent679433ebb8287744a9801f847b7a105dbc2a0404 (diff)
downloadlibvorbis-git-68ebc894325f56ae1d860d49626419cf66ea171b.tar.gz
Fix reading maximum, nominal, minimum bitrate in _vorbis_unpack_info().
https://xiph.org/vorbis/doc/Vorbis_I_spec.html#x1-630004.2.2 specifies these fields as 32bit signed. oggpack_read(opb,32), which is used to read these fields, returns 32 bits stored in a long. On architectures where long is 64bit, this results in a positive value being returned. This value is then stored in struct vorbis_info in bitrate_upper, bitrate_nominal and bitrate_lower, also as long. ogginfo relies on these values in order to display the respective header fields and thus misrepresented the stored value -1 (which has the intended meaning of "bitrate not set") as 2**32-1 on architectures where long is 64bit. Explicitly cast the return value of oggpack_read() to a signed 32bit integer type. A nominal bitrate value of -1 is valid as per specification, and is written by libvorbis for VBR files with samplerate >= 50000Hz. Signed-off-by: Timothy B. Terriberry <tterribe@xiph.org>
-rw-r--r--lib/info.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/lib/info.c b/lib/info.c
index 804060a2..971f004a 100644
--- a/lib/info.c
+++ b/lib/info.c
@@ -211,9 +211,9 @@ static int _vorbis_unpack_info(vorbis_info *vi,oggpack_buffer *opb){
vi->channels=oggpack_read(opb,8);
vi->rate=oggpack_read(opb,32);
- vi->bitrate_upper=oggpack_read(opb,32);
- vi->bitrate_nominal=oggpack_read(opb,32);
- vi->bitrate_lower=oggpack_read(opb,32);
+ vi->bitrate_upper=(ogg_int32_t)oggpack_read(opb,32);
+ 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);