diff options
author | Benny Prijono <bennylp@teluu.com> | 2007-05-30 07:24:19 +0000 |
---|---|---|
committer | Benny Prijono <bennylp@teluu.com> | 2007-05-30 07:24:19 +0000 |
commit | 19740b452dd515188aecfba9126fe26bdff4e3bc (patch) | |
tree | b0aab8313c59eb89c2d82297f3113854ae5440a3 /pjmedia | |
parent | 2195f68b66250eb4b02b73ba40af959fa137c2ff (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.c | 16 |
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; } + |