Fix a memory leak from use of realpath() in HTTP request processing.
realpath() returns a heap-allocated buffer if given NULL for the destination buffer. This must be freed by the caller; dump1090 does not do this. Instead of worrying about freeing it, take the simpler approach of just providing a stack-allocated destination buffer.
This commit is contained in:
parent
bff92c4ad7
commit
d09eefb827
|
@ -57,6 +57,7 @@
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <sys/ioctl.h>
|
#include <sys/ioctl.h>
|
||||||
|
#include <limits.h>
|
||||||
#include "rtl-sdr.h"
|
#include "rtl-sdr.h"
|
||||||
#include "anet.h"
|
#include "anet.h"
|
||||||
#else
|
#else
|
||||||
|
|
12
net_io.c
12
net_io.c
|
@ -762,14 +762,16 @@ int handleHTTPRequest(struct client *c, char *p) {
|
||||||
} else {
|
} else {
|
||||||
struct stat sbuf;
|
struct stat sbuf;
|
||||||
int fd = -1;
|
int fd = -1;
|
||||||
char *rp, *hrp;
|
char rp[PATH_MAX], hrp[PATH_MAX];
|
||||||
|
|
||||||
|
if (!realpath(getFile, rp))
|
||||||
|
rp[0] = 0;
|
||||||
|
if (!realpath(HTMLPATH, hrp))
|
||||||
|
strcpy(hrp, HTMLPATH);
|
||||||
|
|
||||||
rp = realpath(getFile, NULL);
|
|
||||||
hrp = realpath(HTMLPATH, NULL);
|
|
||||||
hrp = (hrp ? hrp : HTMLPATH);
|
|
||||||
clen = -1;
|
clen = -1;
|
||||||
content = strdup("Server error occured");
|
content = strdup("Server error occured");
|
||||||
if (rp && (!strncmp(hrp, rp, strlen(hrp)))) {
|
if (!strncmp(hrp, rp, strlen(hrp))) {
|
||||||
if (stat(getFile, &sbuf) != -1 && (fd = open(getFile, O_RDONLY)) != -1) {
|
if (stat(getFile, &sbuf) != -1 && (fd = open(getFile, O_RDONLY)) != -1) {
|
||||||
content = (char *) realloc(content, sbuf.st_size);
|
content = (char *) realloc(content, sbuf.st_size);
|
||||||
if (read(fd, content, sbuf.st_size) != -1) {
|
if (read(fd, content, sbuf.st_size) != -1) {
|
||||||
|
|
Loading…
Reference in a new issue