From d84fa9fd6eb96202f5721ae3ce6410d1cbb19f96 Mon Sep 17 00:00:00 2001 From: Gregory Maxwell <greg@xiph.org> Date: Fri, 28 Oct 2011 11:06:37 -0400 Subject: [PATCH] Fixes a bug in ec_enc_done when no range coded data was coded and adds test cases to test_unit_entropy. --- celt/entenc.c | 2 +- celt/tests/test_unit_entropy.c | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/celt/entenc.c b/celt/entenc.c index 2e20c3578..3913d8e85 100644 --- a/celt/entenc.c +++ b/celt/entenc.c @@ -287,8 +287,8 @@ void ec_enc_done(ec_enc *_this){ window&=(1<<l)-1; _this->error=-1; } + _this->buf[_this->storage-_this->end_offs-1]|=(unsigned char)window; } - _this->buf[_this->storage-_this->end_offs-1]|=(unsigned char)window; } } } diff --git a/celt/tests/test_unit_entropy.c b/celt/tests/test_unit_entropy.c index 982722ca2..a1ff668b6 100644 --- a/celt/tests/test_unit_entropy.c +++ b/celt/tests/test_unit_entropy.c @@ -326,6 +326,25 @@ int main(int _argc,char **_argv){ fprintf(stderr,"Got %d when expecting 63 for patch_initial_bits",ptr[0]); ret=-1; } + ec_enc_init(&enc,ptr,2); + ec_enc_bit_logp(&enc,0,2); + for(i=0;i<48;i++){ + ec_enc_bits(&enc,0,1); + } + ec_enc_done(&enc); + if(!enc.error){ + fprintf(stderr,"Raw bits overfill didn't fail when it should have"); + ret=-1; + } + ec_enc_init(&enc,ptr,2); + for(i=0;i<17;i++){ + ec_enc_bits(&enc,0,1); + } + ec_enc_done(&enc); + if(!enc.error){ + fprintf(stderr,"17 raw bits encoded in two bytes"); + ret=-1; + } free(ptr); return ret; } -- GitLab