diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2013-10-12 16:10:04 +0300 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2013-10-12 16:10:04 +0300 |
commit | 36a0ea60d220a7edc0c83b73ad1867fd347ca77e (patch) | |
tree | ce6a227382a2d3ec6ca0da05f66cfdf3eb01b2ff /src/pack.c | |
parent | b6678bb65fce1f64e82cc049aae3d7ba6f8aa19c (diff) | |
download | vmod-binlog-36a0ea60d220a7edc0c83b73ad1867fd347ca77e.tar.gz vmod-binlog-36a0ea60d220a7edc0c83b73ad1867fd347ca77e.tar.bz2 |
Handle eventual out-of-memory conditions.
Diffstat (limited to 'src/pack.c')
-rw-r--r-- | src/pack.c | 21 |
1 files changed, 19 insertions, 2 deletions
@@ -432,6 +432,8 @@ packcomp(const char *s, char **endp) if (getrep(s + 1, &s, &rep)) break; pi = malloc(sizeof(*pi)); + if (!pi) + return NULL; pi->next = NULL; pi->spec = ps; pi->rep = rep; @@ -515,8 +517,14 @@ struct packenv * packenv_create(size_t size) { struct packenv *env = calloc(1, sizeof(*env)); - env->buf_base = calloc(1, size); - env->buf_size = size; + if (env) { + env->buf_base = calloc(1, size); + if (!env->buf_base) { + free(env); + return NULL; + } + env->buf_size = size; + } return env; } @@ -565,11 +573,20 @@ main(int argc, char **argv) abort(); pi = packcomp(argv[0], &end); + if (!pi) { + fprintf(stderr, "out of memory\n"); + abort(); + } if (*end) { fprintf(stderr, "compile error near %s\n", end); exit(1); } env = packenv_create(packsize(pi)); + if (!env) { + fprintf(stderr, "out of memory\n"); + abort(); + } + env->fp = stdout; env->argv = argv + 1; env->argc = argc - 1; |