Skip to content

Commit d489ee5

Browse files
committed
Fix a bunch of coverity warnings
1 parent 6087c46 commit d489ee5

File tree

2 files changed

+17
-12
lines changed

2 files changed

+17
-12
lines changed

libhttpd/api.c

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,11 @@ int port;
264264
}
265265
# ifdef SO_REUSEADDR
266266
opt = 1;
267-
setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (char *)&opt, sizeof(int));
267+
if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (char *)&opt, sizeof(int)) < 0) {
268+
close(sock);
269+
free(new);
270+
return NULL;
271+
}
268272
# endif
269273
new->serverSock = sock;
270274
bzero(&addr, sizeof(addr));
@@ -318,8 +322,8 @@ struct timeval *timeout;
318322
return (NULL);
319323
}
320324
if (timeout != 0 && result == 0) {
321-
return (NULL);
322325
server->lastError = 0;
326+
return (NULL);
323327
}
324328
if (result > 0) {
325329
break;
@@ -675,7 +679,7 @@ httpdSendHeaders(request * r)
675679
void
676680
httpdSetResponse(request * r, const char *msg)
677681
{
678-
strncpy(r->response.response, msg, HTTP_MAX_URL);
682+
strncpy(r->response.response, msg, HTTP_MAX_URL - 1);
679683
r->response.response[HTTP_MAX_URL - 1] = 0;
680684
}
681685

@@ -716,6 +720,7 @@ httpdOutput(request * r, const char *msg)
716720
src = msg;
717721
dest = buf;
718722
count = 0;
723+
memset(buf, 0, HTTP_MAX_LEN);
719724
while (*src && count < HTTP_MAX_LEN) {
720725
if (*src == '$') {
721726
const char *tmp;
@@ -732,18 +737,17 @@ httpdOutput(request * r, const char *msg)
732737
}
733738
*cp = 0;
734739
curVar = httpdGetVariableByName(r, varName);
735-
if (curVar) {
740+
if (curVar && ((count + strlen(curVar->value)) < HTTP_MAX_LEN)) {
736741
strcpy(dest, curVar->value);
737742
dest = dest + strlen(dest);
738743
count += strlen(dest);
744+
src = src + strlen(varName) + 1;
745+
continue;
739746
} else {
740-
*dest++ = '$';
741-
strcpy(dest, varName);
742-
dest += strlen(varName);
743-
count += 1 + strlen(varName);
747+
*dest++ = *src++;
748+
count++;
749+
continue;
744750
}
745-
src = src + strlen(varName) + 1;
746-
continue;
747751
}
748752
*dest++ = *src++;
749753
count++;
@@ -780,6 +784,7 @@ va_dcl
780784
if (r->response.headersSent == 0)
781785
httpdSendHeaders(r);
782786
vsnprintf(buf, HTTP_MAX_LEN, fmt, args);
787+
va_end(args); /* Works with both stdargs.h and varargs.h */
783788
r->response.responseLength += strlen(buf);
784789
_httpd_net_write(r->clientSock, buf, strlen(buf));
785790
}

libhttpd/protocol.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -321,11 +321,11 @@ _httpd_storeData(request * r, char *query)
321321
if (!query)
322322
return;
323323

324-
var = (char *)malloc(strlen(query));
324+
var = (char *)malloc(strlen(query) + 1);
325325

326326
cp = query;
327327
cp2 = var;
328-
bzero(var, strlen(query));
328+
bzero(var, strlen(query) + 1);
329329
val = NULL;
330330
while (*cp) {
331331
if (*cp == '=') {

0 commit comments

Comments
 (0)