diff options
Diffstat (limited to 'pjmedia/src/pjmedia-audiodev')
-rw-r--r-- | pjmedia/src/pjmedia-audiodev/alsa_dev.c | 29 | ||||
-rw-r--r-- | pjmedia/src/pjmedia-audiodev/errno.c | 3 |
2 files changed, 25 insertions, 7 deletions
diff --git a/pjmedia/src/pjmedia-audiodev/alsa_dev.c b/pjmedia/src/pjmedia-audiodev/alsa_dev.c index efda3190..997b5894 100644 --- a/pjmedia/src/pjmedia-audiodev/alsa_dev.c +++ b/pjmedia/src/pjmedia-audiodev/alsa_dev.c @@ -171,7 +171,7 @@ static void alsa_error_handler (const char *file, ...) { char err_msg[128]; - int index; + int index, len; va_list arg; #ifndef NDEBUG @@ -180,13 +180,30 @@ static void alsa_error_handler (const char *file, #else index = snprintf (err_msg, sizeof(err_msg), "ALSA lib: "); #endif + if (index < 1 || index >= (int)sizeof(err_msg)) { + index = sizeof(err_msg)-1; + err_msg[index] = '\0'; + goto print_msg; + } + va_start (arg, fmt); - if (index < sizeof(err_msg)-1) - index += vsnprintf (err_msg+index, sizeof(err_msg)-index, fmt, arg); + if (index < sizeof(err_msg)-1) { + len = vsnprintf( err_msg+index, sizeof(err_msg)-index, fmt, arg); + if (len < 1 || len >= (int)sizeof(err_msg)-index) + len = sizeof(err_msg)-index-1; + index += len; + err_msg[index] = '\0'; + } va_end(arg); - if (err && index < sizeof(err_msg)-1) - index += snprintf (err_msg+index, sizeof(err_msg)-index, ": %s", - snd_strerror(err)); + if (err && index < sizeof(err_msg)-1) { + len = snprintf( err_msg+index, sizeof(err_msg)-index, ": %s", + snd_strerror(err)); + if (len < 1 || len >= (int)sizeof(err_msg)-index) + len = sizeof(err_msg)-index-1; + index += len; + err_msg[index] = '\0'; + } +print_msg: PJ_LOG (4,(THIS_FILE, "%s", err_msg)); } diff --git a/pjmedia/src/pjmedia-audiodev/errno.c b/pjmedia/src/pjmedia-audiodev/errno.c index a928485a..f22ee2ea 100644 --- a/pjmedia/src/pjmedia-audiodev/errno.c +++ b/pjmedia/src/pjmedia-audiodev/errno.c @@ -214,7 +214,8 @@ PJ_DEF(pj_str_t) pjmedia_audiodev_strerror(pj_status_t statcode, errstr.slen = pj_ansi_snprintf(buf, bufsize, "Unknown pjmedia-audiodev error %d", statcode); - + if (errstr.slen < 1 || errstr.slen >= (pj_ssize_t)bufsize) + errstr.slen = bufsize - 1; return errstr; } |