summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric S. Raymond <esr@thyrsus.com>2004-12-31 18:55:26 +0000
committerEric S. Raymond <esr@thyrsus.com>2004-12-31 18:55:26 +0000
commitcfaaf52d00d8be6dabab4a0d48a6d4792c206c17 (patch)
treea527a74ebed9a7d0262fb5d0bef8446c8d2fa82f
parent9d9ccf5702e71301b533cca0c9e87aea429ca969 (diff)
downloadgpsd-cfaaf52d00d8be6dabab4a0d48a6d4792c206c17.tar.gz
Eliminate use of vsprintf, in order to prevent buffer overruns.
-rw-r--r--gpsd.c35
1 files changed, 15 insertions, 20 deletions
diff --git a/gpsd.c b/gpsd.c
index af493945..238f3593 100644
--- a/gpsd.c
+++ b/gpsd.c
@@ -82,25 +82,20 @@ static int daemonize(void)
void gpsd_report(int errlevel, const char *fmt, ... )
/* assemble command in printf(3) style, use stderr or syslog */
{
- char buf[BUFSIZ];
- va_list ap;
-
- strcpy(buf, "gpsd: ");
- va_start(ap, fmt) ;
-#ifdef HAVE_VSNPRINTF
- vsnprintf(buf + strlen(buf), sizeof(buf)-strlen(buf), fmt, ap);
-#else
- vsprintf(buf + strlen(buf), fmt, ap);
-#endif
- va_end(ap);
-
- if (errlevel > debuglevel)
- return;
-
- if (in_background)
- syslog((errlevel == 0) ? LOG_ERR : LOG_NOTICE, buf);
- else
- fputs(buf, stderr);
+ if (errlevel <= debuglevel) {
+ char buf[BUFSIZ];
+ va_list ap;
+
+ strcpy(buf, "gpsd: ");
+ va_start(ap, fmt) ;
+ vsnprintf(buf + strlen(buf), sizeof(buf)-strlen(buf), fmt, ap);
+ va_end(ap);
+
+ if (in_background)
+ syslog((errlevel == 0) ? LOG_ERR : LOG_NOTICE, buf);
+ else
+ fputs(buf, stderr);
+ }
}
static void usage(void)
@@ -516,7 +511,7 @@ int main(int argc, char *argv[])
FD_SET(session->gNMEAdata.gps_fd, &all_fds);
}
- while (1) {
+ for (;;) {
struct timeval tv;
memcpy((char *)&rfds, (char *)&all_fds, sizeof(rfds));