Handle memory allocation failures when unformatting data silc.server.1.1.7
authorPekka Riikonen <priikone@silcnet.org>
Sun, 25 May 2008 09:25:04 +0000 (12:25 +0300)
committerPekka Riikonen <priikone@silcnet.org>
Sun, 25 May 2008 09:25:04 +0000 (12:25 +0300)
lib/silcutil/silcbuffmt.c

index bbb923e84a77a8e436cfe9a725db83cd872dc560..98836b61768a3771c2b8a7059db6e7cab728b0d3 100644 (file)
@@ -365,7 +365,8 @@ int silc_buffer_sunformat_vp(SilcStack stack, SilcBuffer src, va_list ap)
        UNFORMAT_HAS_SPACE(src, len2);
        if (silc_likely(len2 && x)) {
          *x = silc_scalloc(stack, len2 + 1, sizeof(unsigned char));
-         memcpy(*x, src->data, len2);
+         if (*x)
+           memcpy(*x, src->data, len2);
        }
        silc_buffer_pull(src, len2);
        break;
@@ -478,7 +479,8 @@ int silc_buffer_sunformat_vp(SilcStack stack, SilcBuffer src, va_list ap)
        UNFORMAT_HAS_SPACE(src, len2);
        if (silc_likely(x && len2)) {
          *x = silc_scalloc(stack, len2 + 1, sizeof(unsigned char));
-         memcpy(*x, src->data, len2);
+         if (*x)
+           memcpy(*x, src->data, len2);
        }
        silc_buffer_pull(src, len2);
        break;
@@ -493,7 +495,8 @@ int silc_buffer_sunformat_vp(SilcStack stack, SilcBuffer src, va_list ap)
        UNFORMAT_HAS_SPACE(src, len2);
        if (silc_likely(x && len2)) {
          *x = silc_scalloc(stack, len2 + 1, sizeof(unsigned char));
-         memcpy(*x, src->data, len2);
+         if (*x)
+           memcpy(*x, src->data, len2);
        }
        silc_buffer_pull(src, len2);
        break;
@@ -521,7 +524,8 @@ int silc_buffer_sunformat_vp(SilcStack stack, SilcBuffer src, va_list ap)
        UNFORMAT_HAS_SPACE(src, len2);
        if (silc_likely(x && len2)) {
          *x = silc_scalloc(stack, len2 + 1, sizeof(unsigned char));
-         memcpy(*x, src->data, len2);
+         if (*x)
+           memcpy(*x, src->data, len2);
        }
        silc_buffer_pull(src, len2);
        break;
@@ -571,7 +575,8 @@ int silc_buffer_sunformat_vp(SilcStack stack, SilcBuffer src, va_list ap)
          *len3 = len2;
        if (x && len2) {
          *x = silc_scalloc(stack, len2 + 1, sizeof(unsigned char));
-         memcpy(*x, src->data, len2);
+         if (*x)
+           memcpy(*x, src->data, len2);
        }
        silc_buffer_pull(src, len2);
        break;
@@ -589,7 +594,8 @@ int silc_buffer_sunformat_vp(SilcStack stack, SilcBuffer src, va_list ap)
          *len3 = len2;
        if (x && len2) {
          *x = silc_scalloc(stack, len2 + 1, sizeof(unsigned char));
-         memcpy(*x, src->data, len2);
+         if (*x)
+           memcpy(*x, src->data, len2);
        }
        silc_buffer_pull(src, len2);
        break;
@@ -630,9 +636,10 @@ int silc_buffer_sunformat_vp(SilcStack stack, SilcBuffer src, va_list ap)
        SILC_GET32_MSB(len2, src->data);
        silc_buffer_pull(src, 4);
        UNFORMAT_HAS_SPACE(src, len2);
-       silc_buffer_sformat(stack, x,
-                           SILC_STR_DATA(src->data, len2),
-                           SILC_STR_END);
+       if (silc_buffer_sformat(stack, x,
+                               SILC_STR_DATA(src->data, len2),
+                               SILC_STR_END) < 0)
+         goto fail;
        silc_buffer_pull(src, len2);
       }
       break;