summaryrefslogtreecommitdiff
path: root/pjmedia
diff options
context:
space:
mode:
authorBenny Prijono <bennylp@teluu.com>2007-05-30 07:24:19 +0000
committerBenny Prijono <bennylp@teluu.com>2007-05-30 07:24:19 +0000
commit19740b452dd515188aecfba9126fe26bdff4e3bc (patch)
treeb0aab8313c59eb89c2d82297f3113854ae5440a3 /pjmedia
parent2195f68b66250eb4b02b73ba40af959fa137c2ff (diff)
Workaround for ticket #290: Bug in WAV player when frame size is larger than file buffer size (thanks Samuel Vinson)
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@1320 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjmedia')
-rw-r--r--pjmedia/src/pjmedia/wav_player.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/pjmedia/src/pjmedia/wav_player.c b/pjmedia/src/pjmedia/wav_player.c
index 471a76bb..9dfa575f 100644
--- a/pjmedia/src/pjmedia/wav_player.c
+++ b/pjmedia/src/pjmedia/wav_player.c
@@ -204,6 +204,10 @@ PJ_DEF(pj_status_t) pjmedia_wav_player_port_create( pj_pool_t *pool,
if (ptime == 0)
ptime = 20;
+ /* Normalize buff_size */
+ if (buff_size < 1) buff_size = PJMEDIA_FILE_PORT_BUFSIZE;
+
+
/* Create fport instance. */
fport = create_file_port(pool);
if (!fport) {
@@ -344,10 +348,19 @@ PJ_DEF(pj_status_t) pjmedia_wav_player_port_create( pj_pool_t *pool,
/* Create file buffer.
*/
- if (buff_size < 1) buff_size = PJMEDIA_FILE_PORT_BUFSIZE;
fport->bufsize = buff_size;
+ /* samples_per_frame must be smaller than bufsize (because get_frame()
+ * doesn't handle this case).
+ */
+ if (fport->base.info.samples_per_frame*fport->base.info.bits_per_sample >=
+ fport->bufsize)
+ {
+ pj_file_close(fport->fd);
+ return PJ_EINVAL;
+ }
+
/* Create buffer. */
fport->buf = (char*) pj_pool_alloc(pool, fport->bufsize);
if (!fport->buf) {
@@ -538,3 +551,4 @@ static pj_status_t file_on_destroy(pjmedia_port *this_port)
pj_file_close(fport->fd);
return PJ_SUCCESS;
}
+