mirror of
https://github.com/bettse/seader.git
synced 2026-10-23 08:43:35 +00:00
Fail on unrealistically large PACS
This commit is contained in:
1 parent
e0b22911bd
commit
677dcea5d0
1 file changed
+8
-3
+8
-3
@@ -338,7 +338,7 @@ void sendCardDetected(SeaderUartBridge* seader_uart, CardDetails_t* cardDetails)
|
||||
ASN_STRUCT_FREE(asn_DEF_Payload, payload);
|
||||
}
|
||||
|
||||
bool unpack_pacs(SeaderCredential* seader_credential, uint8_t* buf, size_t size) {
|
||||
bool unpack_pacs(SeaderWorker* seader_worker, SeaderCredential* seader_credential, uint8_t* buf, size_t size) {
|
||||
PAC_t* pac = 0;
|
||||
pac = calloc(1, sizeof *pac);
|
||||
assert(pac);
|
||||
@@ -354,14 +354,19 @@ bool unpack_pacs(SeaderCredential* seader_credential, uint8_t* buf, size_t size)
|
||||
}
|
||||
|
||||
if(pac->size <= sizeof(seader_credential->credential)) {
|
||||
// TODO: make credential into a 12 byte array
|
||||
seader_credential->bit_length = pac->size * 8 - pac->bits_unused;
|
||||
memcpy(&seader_credential->credential, pac->buf, pac->size);
|
||||
seader_credential->credential = __builtin_bswap64(seader_credential->credential);
|
||||
seader_credential->credential = seader_credential->credential >>
|
||||
(64 - seader_credential->bit_length);
|
||||
rtn = true;
|
||||
} else {
|
||||
// PACS too big (probably bad data)
|
||||
if(seader_worker->callback) {
|
||||
seader_worker->callback(SeaderWorkerEventFail, seader_worker->context);
|
||||
}
|
||||
}
|
||||
// TODO: make credential into a 12 byte array
|
||||
}
|
||||
|
||||
ASN_STRUCT_FREE(asn_DEF_PAC, pac);
|
||||
@@ -383,7 +388,7 @@ bool parseSamResponse(SeaderWorker* seader_worker, SamResponse_t* samResponse) {
|
||||
seader_worker->callback(SeaderWorkerEventFail, seader_worker->context);
|
||||
}
|
||||
}
|
||||
} else if(unpack_pacs(credential, samResponse->buf, samResponse->size)) {
|
||||
} else if(unpack_pacs(seader_worker, credential, samResponse->buf, samResponse->size)) {
|
||||
if(seader_worker->callback) {
|
||||
seader_worker->callback(SeaderWorkerEventSuccess, seader_worker->context);
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user