Fix mem leak.

This commit is contained in:
Simon Josefsson 2007-01-23 12:18:50 +00:00
parent bfb71f3075
commit 6cf4420264

View File

@ -65,6 +65,7 @@ int _libssh2_pem_parse (LIBSSH2_SESSION *session,
char line[LINE_SIZE]; char line[LINE_SIZE];
char *b64data = NULL; char *b64data = NULL;
unsigned int b64datalen = 0; unsigned int b64datalen = 0;
int ret;
do do
{ {
@ -89,7 +90,8 @@ int _libssh2_pem_parse (LIBSSH2_SESSION *session,
b64datalen + linelen); b64datalen + linelen);
if (!tmp) if (!tmp)
{ {
return -1; ret = -1;
goto out;
} }
memcpy (tmp + b64datalen, line, linelen); memcpy (tmp + b64datalen, line, linelen);
b64data = tmp; b64data = tmp;
@ -98,17 +100,24 @@ int _libssh2_pem_parse (LIBSSH2_SESSION *session,
if (readline(line, LINE_SIZE, fp)) if (readline(line, LINE_SIZE, fp))
{ {
return -1; ret = -1;
goto out;
} }
} while (strcmp (line, headerend) != 0); } while (strcmp (line, headerend) != 0);
if (libssh2_base64_decode(session, data, datalen, if (libssh2_base64_decode(session, data, datalen,
b64data, b64datalen)) b64data, b64datalen))
{ {
return -1; ret = -1;
goto out;
} }
return 0; ret = 0;
out:
if (b64data) {
LIBSSH2_FREE (session, b64data);
}
return ret;
} }
static int read_asn1_length (const unsigned char *data, static int read_asn1_length (const unsigned char *data,