ref: 12802b94c69faade31c7196b7f4fb7ef34182cd3
parent: bc5b0254d0b86c4b11637de14dab55e191388dc5
author: Sigrid Solveig Haflínudóttir <ftrvxmtrx@gmail.com>
date: Wed Mar 30 12:59:35 EDT 2022
libtags: flac: check sample rate before dividing by zero; also check number of channels
--- a/sys/src/cmd/audio/libtags/flac.c
+++ b/sys/src/cmd/audio/libtags/flac.c
@@ -1,7 +1,7 @@
/* https://xiph.org/flac/format.html */
#include "tagspriv.h"
-#define beu3(d) ((d)[0]<<16 | (d)[1]<<8 | (d)[2]<<0)
+#define beu3(d) ((d)[0]<<16 | (d)[1]<<8 | (d)[2]<<0)
int
tagflac(Tagctx *ctx)
@@ -18,6 +18,9 @@
sz = beu3(&d[5]); /* size of the stream info */
ctx->samplerate = beu3(&d[18]) >> 4;
ctx->channels = ((d[20]>>1) & 7) + 1;
+ if(ctx->samplerate < 1 || ctx->channels < 1)
+ return -1;
+
g = (uvlong)(d[21] & 0xf)<<32 | beu3(&d[22])<<8 | d[25];
ctx->duration = g * 1000 / ctx->samplerate;