diff options
author | Alexey Yakovenko <wakeroid@gmail.com> | 2009-12-15 21:12:53 +0100 |
---|---|---|
committer | Alexey Yakovenko <wakeroid@gmail.com> | 2009-12-15 21:12:53 +0100 |
commit | a968aac6963161afdfe31d82b60332f88026ea44 (patch) | |
tree | 71d0ed0c408a3e5ee97ccf2efaddd3cc2e10db53 /plugins/ffap | |
parent | 08f264956959feaeff27b989ee7110f444934edb (diff) |
added division by zero handler to ape decoder
Diffstat (limited to 'plugins/ffap')
-rw-r--r-- | plugins/ffap/ffap.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/plugins/ffap/ffap.c b/plugins/ffap/ffap.c index 8db1ad56..48318f9d 100644 --- a/plugins/ffap/ffap.c +++ b/plugins/ffap/ffap.c @@ -41,6 +41,9 @@ //#define trace(...) { fprintf(stderr, __VA_ARGS__); } #define trace(fmt,...) +#define likely(x) __builtin_expect((x),1) +#define unlikely(x) __builtin_expect((x),0) + static DB_decoder_t plugin; static DB_functions_t *deadbeef; @@ -914,7 +917,14 @@ static inline int ape_decode_value(APEContext * ctx, APERice *rice) overflow |= range_decode_bits(ctx, 16); } - base = range_decode_culfreq(ctx, pivot); +// base = range_decode_culfreq(ctx, pivot); + range_dec_normalize(ctx); + ctx->rc.help = ctx->rc.range / pivot; + if (unlikely (ctx->rc.help == 0)) { + ctx->error = 1; + return 0; + } + base = ctx->rc.low / ctx->rc.help; range_decode_update(ctx, 1, base); x = base + overflow * pivot; |