From 7949b9e53b97281cfa4526ffe5cf7c7d887b7025 Mon Sep 17 00:00:00 2001 From: Liong Sauw Ming Date: Tue, 18 Jun 2013 04:08:08 +0000 Subject: Closed #1678: Proper error handling in WAV writer git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@4536 74dad513-b988-da41-8d7b-12977e46ad98 --- pjmedia/src/pjmedia/wav_writer.c | 38 ++++++++++++++++++++++++++++++-------- 1 file changed, 30 insertions(+), 8 deletions(-) (limited to 'pjmedia') diff --git a/pjmedia/src/pjmedia/wav_writer.c b/pjmedia/src/pjmedia/wav_writer.c index d1636276..e1d0d66c 100644 --- a/pjmedia/src/pjmedia/wav_writer.c +++ b/pjmedia/src/pjmedia/wav_writer.c @@ -398,7 +398,10 @@ static pj_status_t file_on_destroy(pjmedia_port *this_port) /* Get file size. */ status = pj_file_getpos(fport->fd, &file_size); - PJ_ASSERT_RETURN(status == PJ_SUCCESS, status); + if (status != PJ_SUCCESS) { + pj_file_close(fport->fd); + return status; + } /* Calculate wave fields */ wave_file_len = (pj_uint32_t)(file_size - 8); @@ -411,12 +414,18 @@ static pj_status_t file_on_destroy(pjmedia_port *this_port) /* Seek to the file_len field. */ status = pj_file_setpos(fport->fd, FILE_LEN_POS, PJ_SEEK_SET); - PJ_ASSERT_RETURN(status == PJ_SUCCESS, status); + if (status != PJ_SUCCESS) { + pj_file_close(fport->fd); + return status; + } /* Write file_len */ bytes = sizeof(wave_file_len); status = pj_file_write(fport->fd, &wave_file_len, &bytes); - PJ_ASSERT_RETURN(status == PJ_SUCCESS, status); + if (status != PJ_SUCCESS) { + pj_file_close(fport->fd); + return status; + } /* Write samples_len in FACT chunk */ if (fport->fmt_tag != PJMEDIA_WAVE_FMT_TAG_PCM) { @@ -430,26 +439,39 @@ static pj_status_t file_on_destroy(pjmedia_port *this_port) /* Seek to samples_len field. */ status = pj_file_setpos(fport->fd, SAMPLES_LEN_POS, PJ_SEEK_SET); - PJ_ASSERT_RETURN(status == PJ_SUCCESS, status); + if (status != PJ_SUCCESS) { + pj_file_close(fport->fd); + return status; + } /* Write samples_len */ bytes = sizeof(wav_samples_len); status = pj_file_write(fport->fd, &wav_samples_len, &bytes); - PJ_ASSERT_RETURN(status == PJ_SUCCESS, status); + if (status != PJ_SUCCESS) { + pj_file_close(fport->fd); + return status; + } } /* Seek to data_len field. */ status = pj_file_setpos(fport->fd, data_len_pos, PJ_SEEK_SET); - PJ_ASSERT_RETURN(status == PJ_SUCCESS, status); + if (status != PJ_SUCCESS) { + pj_file_close(fport->fd); + return status; + } /* Write file_len */ bytes = sizeof(wave_data_len); status = pj_file_write(fport->fd, &wave_data_len, &bytes); - PJ_ASSERT_RETURN(status == PJ_SUCCESS, status); + if (status != PJ_SUCCESS) { + pj_file_close(fport->fd); + return status; + } /* Close file */ status = pj_file_close(fport->fd); - PJ_ASSERT_RETURN(status == PJ_SUCCESS, status); + if (status != PJ_SUCCESS) + return status; /* Done. */ return PJ_SUCCESS; -- cgit v1.2.3