Fix handling for SIMPLE-TLV records with a three-byte length
git-svn-id: https://www.opensc-project.org/svnp/opensc/trunk@3027 c6295689-39f2-0310-b995-f0e70906c6a9
This commit is contained in:
parent
325b9480ea
commit
12c6b11bdd
|
@ -1622,7 +1622,7 @@ int sc_pkcs15_read_file(struct sc_pkcs15_card *p15card,
|
||||||
} else if (file->ef_structure == SC_FILE_EF_LINEAR_VARIABLE_TLV)
|
} else if (file->ef_structure == SC_FILE_EF_LINEAR_VARIABLE_TLV)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
size_t l;
|
size_t l, record_len;
|
||||||
unsigned char *head;
|
unsigned char *head;
|
||||||
|
|
||||||
head = data;
|
head = data;
|
||||||
|
@ -1639,10 +1639,19 @@ int sc_pkcs15_read_file(struct sc_pkcs15_card *p15card,
|
||||||
free(data);
|
free(data);
|
||||||
goto fail_unlock;
|
goto fail_unlock;
|
||||||
}
|
}
|
||||||
if (r <= 2)
|
if (r < 2)
|
||||||
break;
|
break;
|
||||||
memmove(head,head+2,r-2);
|
record_len = head[1];
|
||||||
head += (r-2);
|
if (record_len != 0xff) {
|
||||||
|
memmove(head,head+2,r-2);
|
||||||
|
head += (r-2);
|
||||||
|
} else {
|
||||||
|
if (r < 4)
|
||||||
|
break;
|
||||||
|
record_len = head[2] * 256 + head[3];
|
||||||
|
memmove(head,head+4,r-4);
|
||||||
|
head += (r-4);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
len = head-data;
|
len = head-data;
|
||||||
r = len;
|
r = len;
|
||||||
|
|
Loading…
Reference in New Issue