diff options
author | Michael Santos <[email protected]> | 2010-10-28 20:45:09 -0400 |
---|---|---|
committer | Björn Gustavsson <[email protected]> | 2010-10-29 15:31:50 +0200 |
commit | 3a1c6808c41243552915f841ec885d6ecf97ebd6 (patch) | |
tree | 57a2053bcc6dbd5a6972903796c5e305c2ecf0e7 /lib | |
parent | 76378bb4a1a89d08b41d6f3df0edc6c26160bef7 (diff) | |
download | otp-3a1c6808c41243552915f841ec885d6ecf97ebd6.tar.gz otp-3a1c6808c41243552915f841ec885d6ecf97ebd6.tar.bz2 otp-3a1c6808c41243552915f841ec885d6ecf97ebd6.zip |
ei: error if return value of ei_alloc_big is NULL
Diffstat (limited to 'lib')
-rw-r--r-- | lib/erl_interface/src/decode/decode_big.c | 2 | ||||
-rw-r--r-- | lib/erl_interface/src/legacy/erl_marshal.c | 7 | ||||
-rw-r--r-- | lib/erl_interface/src/misc/ei_printterm.c | 3 |
3 files changed, 8 insertions, 4 deletions
diff --git a/lib/erl_interface/src/decode/decode_big.c b/lib/erl_interface/src/decode/decode_big.c index efe9c6e5d9..b5e9b45a3b 100644 --- a/lib/erl_interface/src/decode/decode_big.c +++ b/lib/erl_interface/src/decode/decode_big.c @@ -74,7 +74,7 @@ erlang_big *ei_alloc_big(unsigned int digit_bytes) { memset(b,(char)0,sizeof(erlang_big)); if ( (b->digits = malloc(2*n)) == NULL) { free(b); - return 0; + return NULL; } b->arity = digit_bytes; diff --git a/lib/erl_interface/src/legacy/erl_marshal.c b/lib/erl_interface/src/legacy/erl_marshal.c index 18315bfbd3..5084c65230 100644 --- a/lib/erl_interface/src/legacy/erl_marshal.c +++ b/lib/erl_interface/src/legacy/erl_marshal.c @@ -1890,8 +1890,11 @@ static int cmp_big_big(unsigned char**e1, unsigned char **e2) ei_get_type((char *)*e1,&i1,&t1,&n1); ei_get_type((char *)*e2,&i2,&t2,&n2); - b1 = ei_alloc_big(n1); - b2 = ei_alloc_big(n2); + if ( (b1 = ei_alloc_big(n1)) == NULL) return -1; + if ( (b2 = ei_alloc_big(n2)) == NULL) { + ei_free_big(b1); + return 1; + } ei_decode_big((char *)*e1,&i1,b1); ei_decode_big((char *)*e2,&i2,b2); diff --git a/lib/erl_interface/src/misc/ei_printterm.c b/lib/erl_interface/src/misc/ei_printterm.c index 98473f780e..5fc6b3542c 100644 --- a/lib/erl_interface/src/misc/ei_printterm.c +++ b/lib/erl_interface/src/misc/ei_printterm.c @@ -253,7 +253,8 @@ static int print_term(FILE* fp, ei_x_buff* x, erlang_big *b; char *ds; - b = ei_alloc_big(n); + if ( (b = ei_alloc_big(n)) == NULL) goto err; + if (ei_decode_big(buf, index, b) < 0) { ei_free_big(b); goto err; |