diff --git a/include/asterisk/http.h b/include/asterisk/http.h
index 1f46b1eed1290a5b067d90b736607e29f3f9df3f..218ac3f1ae900f6c7842b3054d78571947c990e3 100644
--- a/include/asterisk/http.h
+++ b/include/asterisk/http.h
@@ -87,9 +87,13 @@ struct ast_http_uri {
 	unsigned int supports_get:1;
 	/*! This handler accepts POST requests */
 	unsigned int supports_post:1;
+	/*! Structure is malloc'd */
+	unsigned int mallocd:1;
+	/*! Data structure is malloc'd */
+	unsigned int dmallocd:1;
 	/*! Data to bind to the uri if needed */
 	void *data;
-	/*! Key to be used for unlinking if multipile URIs registerd */
+	/*! Key to be used for unlinking if multiple URIs registered */
 	const char *key;
 };
 
diff --git a/main/http.c b/main/http.c
index bb6ae61219b58dfcef12ea315b02c5fe26d3b972..d08b17fa4b4db5342f71a818fcbc59e3fca26177 100644
--- a/main/http.c
+++ b/main/http.c
@@ -389,6 +389,12 @@ void ast_http_uri_unlink_all_with_key(const char *key)
 		if (!strcmp(urih->key, key)) {
 			AST_RWLIST_REMOVE_CURRENT(entry);
 		}
+		if (urih->dmallocd) {
+			ast_free(urih->data);
+		}
+		if (urih->mallocd) {
+			ast_free(urih);
+		}
 	}
 	AST_RWLIST_TRAVERSE_SAFE_END
 	AST_RWLIST_UNLOCK(&uris);
diff --git a/res/res_http_post.c b/res/res_http_post.c
index f1ae7a7da5c043393fe6267fb71192e4bd33cf74..2e4a20a1d44358afc05957d6c4ae85cdff7862ee 100644
--- a/res/res_http_post.c
+++ b/res/res_http_post.c
@@ -289,12 +289,15 @@ static int __ast_http_post_load(int reload)
 			struct ast_str *ds;
 
 			if (!(urih = ast_calloc(sizeof(*urih), 1))) {
+				ast_config_destroy(cfg);
 				return -1;
 			}
 
-			if (!(ds = ast_str_create(32)))
+			if (!(ds = ast_str_create(32))) {
+				ast_free(urih);
+				ast_config_destroy(cfg);
 				return -1;
-
+			}
 
 			urih->description = ast_strdup("HTTP POST mapping");
 			urih->uri = ast_strdup(v->name);
@@ -305,6 +308,7 @@ static int __ast_http_post_load(int reload)
 			urih->supports_post = 1;
 			urih->callback = http_post_callback;
 			urih->key = __FILE__;
+			urih->mallocd = urih->dmallocd = 1;
 
 			ast_http_uri_link(urih);
 		}
@@ -323,7 +327,6 @@ static int unload_module(void)
 
 static int reload(void)
 {
-
 	__ast_http_post_load(1);
 
 	return AST_MODULE_LOAD_SUCCESS;