- 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:
parent
3bced8aeae
commit
79b5672edc
|
@ -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) {
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
Loading…
Reference in New Issue