From 20ad65a85894a48ee751ea00e6b27bef4bdff443 Mon Sep 17 00:00:00 2001 From: sth Date: Tue, 28 Jan 2003 15:36:08 +0000 Subject: [PATCH] made buf[1024] dynamic (malloc) git-svn-id: https://www.opensc-project.org/svnp/opensc/trunk@886 c6295689-39f2-0310-b995-f0e70906c6a9 --- src/libopensc/dir.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/libopensc/dir.c b/src/libopensc/dir.c index a6d1673c..17e43b9a 100644 --- a/src/libopensc/dir.c +++ b/src/libopensc/dir.c @@ -165,16 +165,23 @@ int sc_enum_apps(struct sc_card *card) if (file_size == 0) return 0; if (ef_structure == SC_FILE_EF_TRANSPARENT) { - u8 buf[1024], *p = buf; + u8 *buf = NULL, *p; size_t bufsize; - if (file_size > sizeof(buf)) - SC_FUNC_RETURN(card->ctx, 0, SC_ERROR_INTERNAL); + buf = (u8 *) malloc(file_size); + if (buf == NULL) + return SC_ERROR_OUT_OF_MEMORY; + p = buf; r = sc_read_binary(card, 0, buf, file_size, 0); - SC_TEST_RET(card->ctx, r, "read_binary() failed"); + if (r < 0) { + free(buf); + SC_TEST_RET(card->ctx, r, "read_binary() failed"); + } bufsize = file_size; while (bufsize > 0) { if (card->app_count == SC_MAX_CARD_APPS) { + free(buf); + buf = NULL; error(card->ctx, "Too many applications on card"); break; } @@ -182,6 +189,8 @@ int sc_enum_apps(struct sc_card *card) if (r) break; } + if (buf) + free(buf); } else { /* record structure */ u8 buf[256], *p;