1
0
mirror of https://github.com/apache/httpd.git synced 2025-08-07 04:02:58 +03:00

Added some bulletproofing to memory allocation in the LDAP cache

code.
PR:
Obtained from:
Submitted by:
Reviewed by:


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@90789 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Graham Leggett
2001-08-30 00:46:25 +00:00
parent 5eb009b6be
commit f94ab6fedd
4 changed files with 50 additions and 17 deletions

View File

@@ -1,5 +1,8 @@
Changes with Apache 2.0.26-dev Changes with Apache 2.0.26-dev
*) Added some bulletproofing to memory allocation in the LDAP cache
code. [Graham Leggett]
Changes with Apache 2.0.25 Changes with Apache 2.0.25
*) Move the installed /manual directory out of the /htdocs/ tree, so *) Move the installed /manual directory out of the /htdocs/ tree, so

View File

@@ -90,11 +90,19 @@ void *util_ldap_url_node_copy(void *c)
util_url_node_t *n = (util_url_node_t *)c; util_url_node_t *n = (util_url_node_t *)c;
util_url_node_t *node = (util_url_node_t *)util_ald_alloc(sizeof(util_url_node_t)); util_url_node_t *node = (util_url_node_t *)util_ald_alloc(sizeof(util_url_node_t));
node->url = util_ald_strdup(n->url); if (node) {
node->search_cache = n->search_cache; if (!(node->url = util_ald_strdup(n->url))) {
node->compare_cache = n->compare_cache; util_ald_free(node->url);
node->dn_compare_cache = n->dn_compare_cache; return NULL;
return node; }
node->search_cache = n->search_cache;
node->compare_cache = n->compare_cache;
node->dn_compare_cache = n->dn_compare_cache;
return node;
}
else {
return NULL;
}
} }
void util_ldap_url_node_free(void *n) void util_ldap_url_node_free(void *n)
@@ -200,12 +208,21 @@ void *util_ldap_compare_node_copy(void *c)
{ {
util_compare_node_t *n = (util_compare_node_t *)c; util_compare_node_t *n = (util_compare_node_t *)c;
util_compare_node_t *node = (util_compare_node_t *)util_ald_alloc(sizeof(util_compare_node_t)); util_compare_node_t *node = (util_compare_node_t *)util_ald_alloc(sizeof(util_compare_node_t));
node->dn = util_ald_strdup(n->dn);
node->attrib = util_ald_strdup(n->attrib); if (node) {
node->value = util_ald_strdup(n->value); if (!(node->dn = util_ald_strdup(n->dn)) ||
node->lastcompare = n->lastcompare; !(node->attrib = util_ald_strdup(n->attrib)) ||
node->result = n->result; !(node->value = util_ald_strdup(n->value))) {
return node; util_ldap_compare_node_free(node);
return NULL;
}
node->lastcompare = n->lastcompare;
node->result = n->result;
return node;
}
else {
return NULL;
}
} }
void util_ldap_compare_node_free(void *n) void util_ldap_compare_node_free(void *n)
@@ -234,9 +251,17 @@ void *util_ldap_dn_compare_node_copy(void *c)
{ {
util_dn_compare_node_t *n = (util_dn_compare_node_t *)c; util_dn_compare_node_t *n = (util_dn_compare_node_t *)c;
util_dn_compare_node_t *node = (util_dn_compare_node_t *)util_ald_alloc(sizeof(util_dn_compare_node_t)); util_dn_compare_node_t *node = (util_dn_compare_node_t *)util_ald_alloc(sizeof(util_dn_compare_node_t));
node->reqdn = util_ald_strdup(n->reqdn); if (node) {
node->dn = util_ald_strdup(n->dn); if (!(node->reqdn = util_ald_strdup(n->reqdn)) ||
return node; !(node->dn = util_ald_strdup(n->dn))) {
util_ldap_dn_compare_node_free(node);
return NULL;
}
return node;
}
else {
return NULL;
}
} }
void util_ldap_dn_compare_node_free(void *n) void util_ldap_dn_compare_node_free(void *n)

View File

@@ -193,7 +193,7 @@ void util_ldap_dn_compare_node_free(void *n);
/* util_ldap_cache_mgr.c */ /* util_ldap_cache_mgr.c */
void util_ald_free(const void *ptr); void util_ald_free(const void *ptr);
void *util_ald_alloc(int size); void *util_ald_alloc(unsigned long size);
const char *util_ald_strdup(const char *s); const char *util_ald_strdup(const char *s);
unsigned long util_ald_hash_string(int nstr, ...); unsigned long util_ald_hash_string(int nstr, ...);
void util_ald_cache_purge(util_ald_cache_t *cache); void util_ald_cache_purge(util_ald_cache_t *cache);

View File

@@ -128,8 +128,10 @@ void util_ald_free(const void *ptr)
#endif #endif
} }
void *util_ald_alloc(int size) void *util_ald_alloc(unsigned long size)
{ {
if (0 == size)
return NULL;
#if APR_HAS_SHARED_MEMORY #if APR_HAS_SHARED_MEMORY
if (util_ldap_shm) { if (util_ldap_shm) {
return (void *)apr_shm_calloc(util_ldap_shm, size); return (void *)apr_shm_calloc(util_ldap_shm, size);
@@ -137,7 +139,7 @@ void *util_ald_alloc(int size)
return (void *)calloc(sizeof(char), size); return (void *)calloc(sizeof(char), size);
} }
#else #else
return (void *)calloc(size); return (void *)calloc(sizeof(char), size);
#endif #endif
} }
@@ -202,6 +204,9 @@ void util_ald_cache_purge(util_ald_cache_t *cache)
int i; int i;
util_cache_node_t *p, *q; util_cache_node_t *p, *q;
apr_time_t t; apr_time_t t;
if (!cache)
return;
cache->last_purge = apr_time_now(); cache->last_purge = apr_time_now();
cache->npurged = 0; cache->npurged = 0;