From 479744b146382c4a3cecf55241d6c3126eb49bdf Mon Sep 17 00:00:00 2001 From: Andreas Schneider Date: Sat, 18 Apr 2009 15:06:43 +0000 Subject: Add more error checks to asn1_get_int(). git-svn-id: svn+ssh://svn.berlios.de/svnroot/repos/libssh/trunk@551 7dcaeef0-15fb-0310-b436-a5af3365683c --- libssh/keyfiles.c | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/libssh/keyfiles.c b/libssh/keyfiles.c index c6c9cae..b8ebe02 100644 --- a/libssh/keyfiles.c +++ b/libssh/keyfiles.c @@ -118,19 +118,29 @@ static u32 asn1_get_len(BUFFER *buffer) { } static STRING *asn1_get_int(BUFFER *buffer) { - STRING *ret; + STRING *str; unsigned char type; u32 size; - if (!buffer_get_data(buffer,&type,1) || type != ASN1_INTEGER) + if (buffer_get_data(buffer, &type, 1) == 0 || type != ASN1_INTEGER) { return NULL; - size=asn1_get_len(buffer); - if (!size) + } + size = asn1_get_len(buffer); + if (size == 0) { return NULL; - ret=string_new(size); - if (!buffer_get_data(buffer,ret->string,size)) + } + + str = string_new(size); + if (str == NULL) { return NULL; - return ret; + } + + if (buffer_get_data(buffer, str->string, size) == 0) { + string_free(str); + return NULL; + } + + return str; } static int asn1_check_sequence(BUFFER *buffer) { -- cgit