libtags: m4a: do not div by zero

This commit is contained in:
Sigrid Solveig Haflínudóttir 2022-03-30 20:55:33 +00:00
parent cb4d441cb8
commit 5ddff68167

View file

@ -8,6 +8,7 @@ int
tagm4a(Tagctx *ctx) tagm4a(Tagctx *ctx)
{ {
uvlong duration; uvlong duration;
uint x;
uchar *d; uchar *d;
int sz, type, dtype, i, skip, n; int sz, type, dtype, i, skip, n;
@ -101,12 +102,14 @@ tagm4a(Tagctx *ctx)
if(ctx->read(ctx, d, 16) != 16) if(ctx->read(ctx, d, 16) != 16)
return -1; return -1;
sz -= 16; sz -= 16;
duration = beuint(&d[12]) / beuint(&d[8]); if((x = beuint(&d[8])) > 0)
duration = beuint(&d[12]) / x;
}else if(d[1] == 1){ /* version 1 */ }else if(d[1] == 1){ /* version 1 */
if(ctx->read(ctx, d, 28) != 28) if(ctx->read(ctx, d, 28) != 28)
return -1; return -1;
sz -= 28; sz -= 28;
duration = ((uvlong)beuint(&d[20])<<32 | beuint(&d[24])) / (uvlong)beuint(&d[16]); if((x = beuint(&d[16])) > 0)
duration = ((uvlong)beuint(&d[20])<<32 | beuint(&d[24])) / (uvlong)x;
} }
ctx->duration = duration * 1000; ctx->duration = duration * 1000;
continue; continue;