diff options
Diffstat (limited to 'pjmedia/src/pjmedia-audiodev/alsa_dev.c')
-rw-r--r-- | pjmedia/src/pjmedia-audiodev/alsa_dev.c | 29 |
1 files changed, 23 insertions, 6 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)); } |