Module Name: src
Committed By: mrg
Date: Thu Feb 11 09:57:53 UTC 2021
Modified Files:
src/libexec/httpd: bozohttpd.c bozohttpd.h main.c
src/libexec/httpd/libbozohttpd: libbozohttpd.3
Log Message:
clean up issues detected by address sanitizer (just some memory
leaks that only apply to the library version.)
XXX: the handling of hr_file and its variants is more crappy
again - the prior clean up is slightly less clean now, but at
least it does not leak memory.
XXX2: cgi-bin test hangs with address sanitizer. don't know
why yet..
To generate a diff of this commit:
cvs rdiff -u -r1.125 -r1.126 src/libexec/httpd/bozohttpd.c
cvs rdiff -u -r1.66 -r1.67 src/libexec/httpd/bozohttpd.h
cvs rdiff -u -r1.25 -r1.26 src/libexec/httpd/main.c
cvs rdiff -u -r1.4 -r1.5 src/libexec/httpd/libbozohttpd/libbozohttpd.3
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/libexec/httpd/bozohttpd.c
diff -u src/libexec/httpd/bozohttpd.c:1.125 src/libexec/httpd/bozohttpd.c:1.126
--- src/libexec/httpd/bozohttpd.c:1.125 Thu Feb 11 09:23:55 2021
+++ src/libexec/httpd/bozohttpd.c Thu Feb 11 09:57:52 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: bozohttpd.c,v 1.125 2021/02/11 09:23:55 mrg Exp $ */
+/* $NetBSD: bozohttpd.c,v 1.126 2021/02/11 09:57:52 mrg Exp $ */
/* $eterna: bozohttpd.c,v 1.178 2011/11/18 09:21:15 mrg Exp $ */
@@ -239,6 +239,20 @@ bozo_set_pref(bozohttpd_t *httpd, bozopr
return 1;
}
+static void
+bozo_clear_prefs(bozohttpd_t *httpd, bozoprefs_t *prefs)
+{
+ size_t i;
+
+ for (i = 0; i < prefs->count; i++) {
+ free(prefs->name[i]);
+ free(prefs->value[i]);
+ }
+
+ free(prefs->name);
+ free(prefs->value);
+}
+
/*
* get a variable's value, or NULL
*/
@@ -339,8 +353,11 @@ bozo_clean_request(bozo_httpreq_t *reque
free(request->hr_serverport);
free(request->hr_virthostname);
free(request->hr_file_free);
+ /* XXX this is gross */
if (request->hr_file_free != request->hr_oldfile)
free(request->hr_oldfile);
+ else
+ free(request->hr_file);
free(request->hr_query);
free(request->hr_host);
bozo_user_free(request->hr_user);
@@ -2694,6 +2711,23 @@ bozo_setup(bozohttpd_t *httpd, bozoprefs
return 1;
}
+void
+bozo_cleanup(bozohttpd_t *httpd, bozoprefs_t *prefs)
+{
+ bozo_clear_prefs(httpd, prefs);
+
+ free(httpd->virthostname);
+ free(httpd->errorbuf);
+ free(httpd->getln_buffer);
+ free(httpd->slashdir);
+#define bozo_unconst(x) ((void *)(uintptr_t)x)
+ free(bozo_unconst(httpd->server_software));
+ free(bozo_unconst(httpd->index_html));
+ free(bozo_unconst(httpd->dir_readme));
+ free(bozo_unconst(httpd->public_html));
+#undef bozo_unconst
+}
+
int
bozo_get_version(char *buf, size_t size)
{
Index: src/libexec/httpd/bozohttpd.h
diff -u src/libexec/httpd/bozohttpd.h:1.66 src/libexec/httpd/bozohttpd.h:1.67
--- src/libexec/httpd/bozohttpd.h:1.66 Thu Feb 11 09:23:55 2021
+++ src/libexec/httpd/bozohttpd.h Thu Feb 11 09:57:52 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: bozohttpd.h,v 1.66 2021/02/11 09:23:55 mrg Exp $ */
+/* $NetBSD: bozohttpd.h,v 1.67 2021/02/11 09:57:52 mrg Exp $ */
/* $eterna: bozohttpd.h,v 1.39 2011/11/18 09:21:15 mrg Exp $ */
@@ -443,6 +443,7 @@ int bozo_init_httpd(bozohttpd_t *);
int bozo_init_prefs(bozohttpd_t *, bozoprefs_t *);
int bozo_set_defaults(bozohttpd_t *, bozoprefs_t *);
int bozo_setup(bozohttpd_t *, bozoprefs_t *, const char *, const char *);
+void bozo_cleanup(bozohttpd_t *, bozoprefs_t *);
bozo_httpreq_t *bozo_read_request(bozohttpd_t *);
void bozo_process_request(bozo_httpreq_t *);
void bozo_clean_request(bozo_httpreq_t *);
Index: src/libexec/httpd/main.c
diff -u src/libexec/httpd/main.c:1.25 src/libexec/httpd/main.c:1.26
--- src/libexec/httpd/main.c:1.25 Thu Oct 15 04:21:53 2020
+++ src/libexec/httpd/main.c Thu Feb 11 09:57:52 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: main.c,v 1.25 2020/10/15 04:21:53 mrg Exp $ */
+/* $NetBSD: main.c,v 1.26 2021/02/11 09:57:52 mrg Exp $ */
/* $eterna: main.c,v 1.6 2011/11/18 09:21:15 mrg Exp $ */
/* from: eterna: bozohttpd.c,v 1.159 2009/05/23 02:14:30 mrg Exp */
@@ -408,5 +408,7 @@ main(int argc, char **argv)
}
} while (httpd.background);
+ bozo_cleanup(&httpd, &prefs);
+
return (0);
}
Index: src/libexec/httpd/libbozohttpd/libbozohttpd.3
diff -u src/libexec/httpd/libbozohttpd/libbozohttpd.3:1.4 src/libexec/httpd/libbozohttpd/libbozohttpd.3:1.5
--- src/libexec/httpd/libbozohttpd/libbozohttpd.3:1.4 Sat Feb 4 01:32:54 2017
+++ src/libexec/httpd/libbozohttpd/libbozohttpd.3 Thu Feb 11 09:57:53 2021
@@ -1,4 +1,4 @@
-.\" $NetBSD: libbozohttpd.3,v 1.4 2017/02/04 01:32:54 mrg Exp $
+.\" $NetBSD: libbozohttpd.3,v 1.5 2021/02/11 09:57:53 mrg Exp $
.\"
.\" $eterna: libbozohttpd.3,v 1.2 2010/05/10 02:48:23 mrg Exp $
.\"
@@ -29,7 +29,7 @@
.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
.\" POSSIBILITY OF SUCH DAMAGE.
.\"
-.Dd February 2, 2017
+.Dd February 11, 2021
.Dt LIBBOZOHTTPD 3
.Os
.Sh NAME
@@ -67,6 +67,10 @@
.Fo bozo_clean_request
.Fa "bozo_httpreq_t *"
.Fc
+.Ft void
+.Fo bozo_cleanup
+.Fa "bozohttpd_t *httpd" "bozoprefs_t *prefs"
+.Fc
.Sh DESCRIPTION
.Nm
is a library interface to the
@@ -124,6 +128,9 @@ and queried using the two
function.
This is the main interface for selecting options, and for
setting preferences.
+The memory allocated by
+.Fn bozo_setup
+for both the httpd structure and the preferences will be freed.
.Sh SEE ALSO
.Xr gethostname 3 ,
.Xr ssl 3 ,