From 55f5b124b2e0357a3908df51e7fc7e526a6098e3 Mon Sep 17 00:00:00 2001 From: Henry Gabryjelski <740168+henrygab@users.noreply.github.com> Date: Wed, 3 Sep 2025 16:30:34 -0700 Subject: [PATCH] Improved card limits validation Unsupported features must have values in `weigand_card_t` data set to zero. --- client/src/wiegand_formats.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/client/src/wiegand_formats.c b/client/src/wiegand_formats.c index 907fb5a45..03d718ff9 100644 --- a/client/src/wiegand_formats.c +++ b/client/src/wiegand_formats.c @@ -1610,6 +1610,20 @@ int HIDFindCardFormat(const char *format) { // return true if the card is valid bool validate_card_limit(int format_idx, wiegand_card_t *card) { cardformatdescriptor_t card_descriptor = FormatTable[format_idx].Fields; + + // If a field is not supported, it's implicitly required to be zero + if ((!card_descriptor.hasCardNumber ) && (card->CardNumber != 0u)) { + return false; // Format does not support card number, but non-zero card number provided + } + if ((!card_descriptor.hasFacilityCode) && (card->FacilityCode != 0u)) { + return false; // Format does not support facility code, but non-zero facility code provided + } + if ((!card_descriptor.hasIssueLevel ) && (card->IssueLevel != 0u)) { + return false; // Format does not support issue levels, but non-zero issue level provided + } + if ((!card_descriptor.hasOEMCode ) && (card->OEM != 0u)) { + return false; // Format does not support OEM codes, but non-zero OEM code provided + } return !((card->FacilityCode > card_descriptor.MaxFC) || (card->CardNumber > card_descriptor.MaxCN) || (card->IssueLevel > card_descriptor.MaxIL) ||