summaryrefslogtreecommitdiff
path: root/pjmedia/src/pjmedia-audiodev/alsa_dev.c
diff options
context:
space:
mode:
authorBenny Prijono <bennylp@teluu.com>2013-10-08 09:08:13 +0000
committerBenny Prijono <bennylp@teluu.com>2013-10-08 09:08:13 +0000
commit7369d96f8361c523a7ae4753391a9a7336a89fb8 (patch)
tree64afc15371dfb0cafe15648537d33d4ad0c4c38a /pjmedia/src/pjmedia-audiodev/alsa_dev.c
parent476648f068a362857304aca7b383f700a304d59e (diff)
Re #1703: fixing general bugs. First installment: correct handling of snprintf return value
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@4613 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjmedia/src/pjmedia-audiodev/alsa_dev.c')
-rw-r--r--pjmedia/src/pjmedia-audiodev/alsa_dev.c29
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));
}