From ce019c896df1ba0a1ddf7407d69449d85bb6cde2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96man?= Date: Thu, 11 Oct 2012 09:49:11 +0100 Subject: [PATCH] Avoid infinte loop in read_golomb_ue() --- src/bitstream.c | 9 ++++++++- src/bitstream.h | 2 ++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/bitstream.c b/src/bitstream.c index 2d426758..bc3218b6 100644 --- a/src/bitstream.c +++ b/src/bitstream.c @@ -46,6 +46,13 @@ skip_bits(bitstream_t *bs, int num) bs->offset += num; } +int +bs_eof(const bitstream_t *bs) +{ + return bs->offset >= bs->len; +} + + unsigned int read_bits(bitstream_t *bs, int num) { @@ -76,7 +83,7 @@ read_golomb_ue(bitstream_t *bs) { int b, lzb = -1; - for(b = 0; !b; lzb++) + for(b = 0; !b && !bs_eof(bs); lzb++) b = read_bits1(bs); return (1 << lzb) - 1 + read_bits(bs, lzb); diff --git a/src/bitstream.h b/src/bitstream.h index 5aa468bf..8718e80b 100644 --- a/src/bitstream.h +++ b/src/bitstream.h @@ -44,4 +44,6 @@ unsigned int remaining_bits(bitstream_t *gb); void put_bits(bitstream_t *bs, int val, int num); +int bs_eof(const bitstream_t *bs); + #endif /* BITSTREAM_H_ */