mirror of
https://github.com/zeek/zeek.git
synced 2025-10-02 14:48:21 +00:00
Catching out-of-memory in patricia tree code.
Based on patch by Bill Parker.
This commit is contained in:
parent
63d43e6545
commit
05e6289719
5 changed files with 83 additions and 58 deletions
4
CHANGES
4
CHANGES
|
@ -1,4 +1,8 @@
|
|||
|
||||
2.1-195 | 2012-12-03 14:50:33 -0800
|
||||
|
||||
* Catching out-of-memory in patricia tree code. (Bill Parker)
|
||||
|
||||
2.1-194 | 2012-12-03 14:36:26 -0800
|
||||
|
||||
* Renaming ASCII writer filter option 'only_single_header_row' to
|
||||
|
|
2
VERSION
2
VERSION
|
@ -1 +1 @@
|
|||
2.1-194
|
||||
2.1-195
|
||||
|
|
|
@ -66,6 +66,9 @@ static char copyright[] =
|
|||
|
||||
#define Delete free
|
||||
|
||||
// From Bro for reporting memory exhaustion.
|
||||
extern void out_of_memory(const char* where);
|
||||
|
||||
/* { from prefix.c */
|
||||
|
||||
/* prefix_tochar
|
||||
|
@ -251,6 +254,9 @@ New_Prefix2 (int family, void *dest, int bitlen, prefix_t *prefix)
|
|||
default_bitlen = 128;
|
||||
if (prefix == NULL) {
|
||||
prefix = calloc(1, sizeof (prefix_t));
|
||||
if (prefix == NULL)
|
||||
out_of_memory("patrica/new_prefix2: unable to allocate memory");
|
||||
|
||||
dynamic_allocated++;
|
||||
}
|
||||
memcpy (&prefix->add.sin6, dest, 16);
|
||||
|
@ -260,10 +266,14 @@ New_Prefix2 (int family, void *dest, int bitlen, prefix_t *prefix)
|
|||
if (prefix == NULL) {
|
||||
#ifndef NT
|
||||
prefix = calloc(1, sizeof (prefix4_t));
|
||||
if (prefix == NULL)
|
||||
out_of_memory("patrica/new_prefix2: unable to allocate memory");
|
||||
#else
|
||||
//for some reason, compiler is getting
|
||||
//prefix4_t size incorrect on NT
|
||||
prefix = calloc(1, sizeof (prefix_t));
|
||||
if (prefix == NULL)
|
||||
out_of_memory("patrica/new_prefix2: unable to allocate memory");
|
||||
#endif /* NT */
|
||||
|
||||
dynamic_allocated++;
|
||||
|
@ -396,6 +406,8 @@ patricia_tree_t *
|
|||
New_Patricia (int maxbits)
|
||||
{
|
||||
patricia_tree_t *patricia = calloc(1, sizeof *patricia);
|
||||
if (patricia == NULL)
|
||||
out_of_memory("patrica/new_patricia: unable to allocate memory");
|
||||
|
||||
patricia->maxbits = maxbits;
|
||||
patricia->head = NULL;
|
||||
|
@ -665,6 +677,9 @@ patricia_lookup (patricia_tree_t *patricia, prefix_t *prefix)
|
|||
|
||||
if (patricia->head == NULL) {
|
||||
node = calloc(1, sizeof *node);
|
||||
if (node == NULL)
|
||||
out_of_memory("patrica/patrica_lookup: unable to allocate memory");
|
||||
|
||||
node->bit = prefix->bitlen;
|
||||
node->prefix = Ref_Prefix (prefix);
|
||||
node->parent = NULL;
|
||||
|
@ -776,6 +791,9 @@ patricia_lookup (patricia_tree_t *patricia, prefix_t *prefix)
|
|||
}
|
||||
|
||||
new_node = calloc(1, sizeof *new_node);
|
||||
if (new_node == NULL)
|
||||
out_of_memory("patrica/patrica_lookup: unable to allocate memory");
|
||||
|
||||
new_node->bit = prefix->bitlen;
|
||||
new_node->prefix = Ref_Prefix (prefix);
|
||||
new_node->parent = NULL;
|
||||
|
@ -828,6 +846,9 @@ patricia_lookup (patricia_tree_t *patricia, prefix_t *prefix)
|
|||
}
|
||||
else {
|
||||
glue = calloc(1, sizeof *glue);
|
||||
if (glue == NULL)
|
||||
out_of_memory("patrica/patrica_lookup: unable to allocate memory");
|
||||
|
||||
glue->bit = differ_bit;
|
||||
glue->prefix = NULL;
|
||||
glue->parent = node->parent;
|
||||
|
|
|
@ -1416,7 +1416,7 @@ void safe_close(int fd)
|
|||
}
|
||||
}
|
||||
|
||||
void out_of_memory(const char* where)
|
||||
extern "C" void out_of_memory(const char* where)
|
||||
{
|
||||
fprintf(stderr, "out of memory in %s.\n", where);
|
||||
|
||||
|
|
|
@ -303,7 +303,7 @@ extern bool safe_write(int fd, const char* data, int len);
|
|||
// Wraps close(2) to emit error messages and abort on unrecoverable errors.
|
||||
extern void safe_close(int fd);
|
||||
|
||||
extern void out_of_memory(const char* where);
|
||||
extern "C" void out_of_memory(const char* where);
|
||||
|
||||
inline void* safe_realloc(void* ptr, size_t size)
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue