- Keep the DER encoding of each PKCS #15 object in memory

git-svn-id: https://www.opensc-project.org/svnp/opensc/trunk@761 c6295689-39f2-0310-b995-f0e70906c6a9
This commit is contained in:
jey 2002-12-10 13:27:17 +00:00
parent 3bced8aeae
commit 79b5672edc
2 changed files with 18 additions and 0 deletions

View File

@ -770,6 +770,8 @@ void sc_pkcs15_remove_object(struct sc_pkcs15_card *p15card,
obj->next->prev = obj->prev;
if (obj->data)
free(obj->data);
if (obj->der.value)
free(obj->der.value);
free(obj);
}
@ -908,12 +910,16 @@ int sc_pkcs15_parse_df(struct sc_pkcs15_card *p15card,
&buf, &bufsize, &df->file);
p = buf;
do {
const u8 *oldp;
size_t obj_len;
obj = (struct sc_pkcs15_object *) malloc(sizeof(struct sc_pkcs15_object));
if (obj == NULL) {
r = SC_ERROR_OUT_OF_MEMORY;
goto ret;
}
memset(obj, 0, sizeof(struct sc_pkcs15_object));
oldp = p;
r = func(p15card, obj, &p, &bufsize);
if (r) {
free(obj);
@ -922,6 +928,16 @@ int sc_pkcs15_parse_df(struct sc_pkcs15_card *p15card,
sc_perror(ctx, r, "Error decoding DF entry");
goto ret;
}
obj_len = p - oldp;
obj->der.value = malloc(obj_len);
if (obj->der.value == NULL) {
r = SC_ERROR_OUT_OF_MEMORY;
goto ret;
}
memcpy(obj->der.value, oldp, obj_len);
obj->der.len = obj_len;
obj->df = df;
r = sc_pkcs15_add_object(p15card, obj);
if (r) {

View File

@ -274,6 +274,8 @@ struct sc_pkcs15_object {
struct sc_pkcs15_df *df; /* can be NULL, if object is 'floating' */
struct sc_pkcs15_object *next, *prev; /* used only internally */
struct sc_pkcs15_der der;
};
typedef struct sc_pkcs15_object sc_pkcs15_object_t;