summaryrefslogtreecommitdiff
path: root/plugins/ffap
diff options
context:
space:
mode:
authorGravatar Alexey Yakovenko <wakeroid@gmail.com>2009-12-15 21:12:53 +0100
committerGravatar Alexey Yakovenko <wakeroid@gmail.com>2009-12-15 21:12:53 +0100
commita968aac6963161afdfe31d82b60332f88026ea44 (patch)
tree71d0ed0c408a3e5ee97ccf2efaddd3cc2e10db53 /plugins/ffap
parent08f264956959feaeff27b989ee7110f444934edb (diff)
added division by zero handler to ape decoder
Diffstat (limited to 'plugins/ffap')
-rw-r--r--plugins/ffap/ffap.c12
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;