jsoninfo: make sure that uuid is null-terminated
authorFerry Huberts <ferry.huberts@pelagic.nl>
Tue, 23 Oct 2012 08:16:47 +0000 (10:16 +0200)
committerFerry Huberts <ferry.huberts@pelagic.nl>
Tue, 23 Oct 2012 11:45:14 +0000 (13:45 +0200)
Since it's used as a string.

Coverity:
CID 739693 (#1 of 1): String not null terminated (STRING_NULL)
At (2): Function "fread(void * restrict, size_t, size_t, FILE * restrict)"
        does not terminate string "*uuid".
At (4): Passing unterminated string "uuid" to "strchr(char const *, int)",
        which expects a null-terminated string.

Signed-off-by: Ferry Huberts <ferry.huberts@pelagic.nl>
lib/jsoninfo/src/olsrd_jsoninfo.c
lib/jsoninfo/src/olsrd_jsoninfo.h

index 1a6d9b7..343a31a 100644 (file)
@@ -157,7 +157,7 @@ static size_t outbuffer_written[MAX_CLIENTS];
 static int outbuffer_socket[MAX_CLIENTS];
 static int outbuffer_count;
 
-char uuid[UUIDLEN];
+char uuid[UUIDLEN + 1];
 char uuidfile[FILENAME_MAX];
 
 static struct timeval start_time;
@@ -423,8 +423,9 @@ read_uuid_from_file(const char *file)
   FILE *f;
   char* end;
   int r = 0;
+  size_t chars;
 
-  *uuid = 0;
+  memset(uuid, 0, sizeof(uuid));
 
   f = fopen(file, "r");
   olsr_printf(1, "(JSONINFO) Reading UUID from '%s'\n", file);
@@ -433,7 +434,10 @@ read_uuid_from_file(const char *file)
                 file, strerror(errno));
     return -1;
   }
-  if (fread(uuid, 1, UUIDLEN, f) > 0) {
+  chars = fread(uuid, 1, UUIDLEN, f);
+  if (chars > 0) {
+    uuid[chars] = '\0'; /* null-terminate the string */
+
     /* we only use the first line of the file */
     end = strchr(uuid, '\n');
     if(end)
index 6a5122f..8478f62 100644 (file)
@@ -55,7 +55,7 @@
 /* #define JSONINFO_ALLOW_LOCALHOST */
 
 #define UUIDLEN 256
-extern char uuid[UUIDLEN];
+extern char uuid[UUIDLEN + 1];
 extern char uuidfile[FILENAME_MAX];
 
 extern union olsr_ip_addr jsoninfo_accept_ip;