From 659451d6ae9212f6f5414a99646ffbe4f55689d0 Mon Sep 17 00:00:00 2001 From: Pekka Riikonen Date: Sun, 25 May 2008 12:25:04 +0300 Subject: [PATCH] Handle memory allocation failures when unformatting data --- lib/silcutil/silcbuffmt.c | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/lib/silcutil/silcbuffmt.c b/lib/silcutil/silcbuffmt.c index bbb923e8..98836b61 100644 --- a/lib/silcutil/silcbuffmt.c +++ b/lib/silcutil/silcbuffmt.c @@ -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; -- 2.24.0