mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-06 04:30:28 +00:00
HTTP module memory leaks
(closes issue #13230) Reported by: eliel Patches: res_http_post_leak.patch uploaded by eliel (license 64) git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@135476 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -87,9 +87,13 @@ struct ast_http_uri {
|
|||||||
unsigned int supports_get:1;
|
unsigned int supports_get:1;
|
||||||
/*! This handler accepts POST requests */
|
/*! This handler accepts POST requests */
|
||||||
unsigned int supports_post:1;
|
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 */
|
/*! Data to bind to the uri if needed */
|
||||||
void *data;
|
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;
|
const char *key;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -389,6 +389,12 @@ void ast_http_uri_unlink_all_with_key(const char *key)
|
|||||||
if (!strcmp(urih->key, key)) {
|
if (!strcmp(urih->key, key)) {
|
||||||
AST_RWLIST_REMOVE_CURRENT(entry);
|
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_TRAVERSE_SAFE_END
|
||||||
AST_RWLIST_UNLOCK(&uris);
|
AST_RWLIST_UNLOCK(&uris);
|
||||||
|
@@ -289,12 +289,15 @@ static int __ast_http_post_load(int reload)
|
|||||||
struct ast_str *ds;
|
struct ast_str *ds;
|
||||||
|
|
||||||
if (!(urih = ast_calloc(sizeof(*urih), 1))) {
|
if (!(urih = ast_calloc(sizeof(*urih), 1))) {
|
||||||
|
ast_config_destroy(cfg);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(ds = ast_str_create(32)))
|
if (!(ds = ast_str_create(32))) {
|
||||||
|
ast_free(urih);
|
||||||
|
ast_config_destroy(cfg);
|
||||||
return -1;
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
urih->description = ast_strdup("HTTP POST mapping");
|
urih->description = ast_strdup("HTTP POST mapping");
|
||||||
urih->uri = ast_strdup(v->name);
|
urih->uri = ast_strdup(v->name);
|
||||||
@@ -305,6 +308,7 @@ static int __ast_http_post_load(int reload)
|
|||||||
urih->supports_post = 1;
|
urih->supports_post = 1;
|
||||||
urih->callback = http_post_callback;
|
urih->callback = http_post_callback;
|
||||||
urih->key = __FILE__;
|
urih->key = __FILE__;
|
||||||
|
urih->mallocd = urih->dmallocd = 1;
|
||||||
|
|
||||||
ast_http_uri_link(urih);
|
ast_http_uri_link(urih);
|
||||||
}
|
}
|
||||||
@@ -323,7 +327,6 @@ static int unload_module(void)
|
|||||||
|
|
||||||
static int reload(void)
|
static int reload(void)
|
||||||
{
|
{
|
||||||
|
|
||||||
__ast_http_post_load(1);
|
__ast_http_post_load(1);
|
||||||
|
|
||||||
return AST_MODULE_LOAD_SUCCESS;
|
return AST_MODULE_LOAD_SUCCESS;
|
||||||
|
Reference in New Issue
Block a user