From aa14ba62fd02ffd0e7053c23b2918e7aa46bcb86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sigrid=20Solveig=20Hafl=C3=ADnud=C3=B3ttir?= Date: Wed, 19 Jan 2022 02:16:09 +0000 Subject: [PATCH] flacdec: do not loop forever on write/decode errors --- sys/src/cmd/audio/flacdec/flacdec.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/sys/src/cmd/audio/flacdec/flacdec.c b/sys/src/cmd/audio/flacdec/flacdec.c index c9d11e0f4..fcdd2e57a 100644 --- a/sys/src/cmd/audio/flacdec/flacdec.c +++ b/sys/src/cmd/audio/flacdec/flacdec.c @@ -145,8 +145,8 @@ decoutput(FLAC__StreamDecoder *dec, FLAC__Frame *frame, FLAC__int32 *buffer[], v } } n = b * chans * len; - if(n > 0) - write(ifd, buf, n); + if(n > 0 && write(ifd, buf, n) != n) + return FLAC__STREAM_DECODER_WRITE_STATUS_ABORT; return FLAC__STREAM_DECODER_WRITE_STATUS_CONTINUE; } @@ -191,7 +191,8 @@ int main(int argc, char *argv[]) if(seek > 0.0){ FLAC__uint64 srate; do{ - FLAC__stream_decoder_process_single(dec); + if(!FLAC__stream_decoder_process_single(dec)) + break; srate = FLAC__stream_decoder_get_sample_rate(dec); }while(srate == 0); if(!FLAC__stream_decoder_seek_absolute(dec, srate*seek)){