[PATCH 1/2] ei: error if return value of ei_alloc_big is NULL

Michael Santos <>
Fri Oct 29 02:45:09 CEST 2010


---
 lib/erl_interface/src/decode/decode_big.c  |    2 +-
 lib/erl_interface/src/legacy/erl_marshal.c |    7 +++++--
 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 efe9c6e..b5e9b45 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 18315bf..5084c65 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 98473f7..5fc6b35 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;
-- 
1.7.0.4



More information about the erlang-patches mailing list