--- a/src/xa.c +++ b/src/xa.c @@ -141,6 +141,12 @@ ft->signal.rate = xa->header.sampleRate; } else { lsx_report("User options overriding rate read in .xa header"); + } + + if (ft->signal.channels == 0 || ft->signal.channels > UINT16_MAX) { + lsx_fail_errno(ft, SOX_EFMT, "invalid channel count %d", + ft->signal.channels); + return SOX_EOF; } /* Check for supported formats */