summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@gmx.de>2012-12-11 21:02:14 +0100
committercinap_lenrek <cinap_lenrek@gmx.de>2012-12-11 21:02:14 +0100
commitbedfd8f3617c47460c29907abb675e8fe1d842b2 (patch)
tree3daf356e4c765aee19a1d82daf51f0f26c197aec
parent45a5074b10266b82a03c9fd7a636672c34eb1f39 (diff)
audio/pcmconv: check number of input channels
-rw-r--r--sys/src/cmd/audio/pcmconv/pcmconv.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/sys/src/cmd/audio/pcmconv/pcmconv.c b/sys/src/cmd/audio/pcmconv/pcmconv.c
index 188dd93c7..e2cbddb09 100644
--- a/sys/src/cmd/audio/pcmconv/pcmconv.c
+++ b/sys/src/cmd/audio/pcmconv/pcmconv.c
@@ -421,6 +421,9 @@ main(int argc, char *argv[])
exits(0);
}
+ if(i.channels > nelem(ch))
+ sysfatal("too many input channels %d", i.channels);
+
switch(i.fmt){
case 's': iconv = siconv; break;
case 'u': iconv = uiconv; break;
@@ -444,14 +447,14 @@ main(int argc, char *argv[])
obuf = sbrk(o.framesz * m);
memset(ch, 0, sizeof(ch));
- for(k=0; k < i.channels && k < nelem(ch); k++)
+ for(k=0; k < i.channels; k++)
chaninit(&ch[k], i.rate, o.rate, n);
for(;;){
if(l >= 0 && l < r)
r = l;
n = cread(0, ibuf, r, i.framesz);
- if(n < 0 || n > sizeof(ibuf))
+ if(n < 0)
sysfatal("read: %r");
if(l > 0)
l -= n;