From 5ddca26d394383f34b2aff2b61399e0e68c6a995 Mon Sep 17 00:00:00 2001 From: Sjef Verhoeven PE5PVB Date: Thu, 2 Nov 2023 21:10:31 +0100 Subject: [PATCH] Added extra checks on parsing CT and PIN --- src/TEF6686.cpp | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/src/TEF6686.cpp b/src/TEF6686.cpp index 9709b5a..7ebd326 100644 --- a/src/TEF6686.cpp +++ b/src/TEF6686.cpp @@ -1084,10 +1084,12 @@ void TEF6686::readRDS(byte showrdserrors) if (!rdsDerrorThreshold) { if (rds.rdsD != 0) { // PIN decoder - rds.hasPIN = true; - rds.pinMin = rds.rdsD & 0x3f; - rds.pinHour = rds.rdsD >> 6 & 0x1f; - rds.pinDay = rds.rdsD >> 11 & 0x1f; + if ((rds.rdsD & 0x3f) < 61 && ((rds.rdsD >> 6) & 0x1f) < 24) { + rds.hasPIN = true; + rds.pinMin = rds.rdsD & 0x3f; + rds.pinHour = rds.rdsD >> 6 & 0x1f; + rds.pinDay = rds.rdsD >> 11 & 0x1f; + } } } } break; @@ -1228,17 +1230,19 @@ void TEF6686::readRDS(byte showrdserrors) J = J - 1461 * Y / 4 + 31; M = 80 * (J + 0) / 2447; - rds.day = J - 2447 * M / 80; + if ((J - 2447 * M / 80) < 32) rds.day = J - 2447 * M / 80; J = M / 11; - rds.month = M + 2 - (12 * J); - rds.year = 100 * (C - 49) + Y + J; - rds.hour = ((rds.rdsD >> 12) & 0x0f); - rds.hour += ((rds.rdsC << 4) & 0x0010); - rds.minute = (rds.rdsD >> 6) & 0x3f; - rds.offset = ((bitRead(rds.rdsD, 5) ? -rds.rdsD & 0x3f : rds.rdsD & 0x3f) / 2); - rds.hour += rds.offset; - rds.hour = (((byte)rds.hour + 24) % 24); + if ((M + 2 - (12 * J)) < 13) rds.month = M + 2 - (12 * J); + if ((100 * (C - 49) + Y + J) > 2022) rds.year = 100 * (C - 49) + Y + J; + if ((((rds.rdsD >> 12) & 0x0f)) < 25) { + rds.hour = ((rds.rdsD >> 12) & 0x0f); + rds.hour += ((rds.rdsC << 4) & 0x0010); + rds.offset = ((bitRead(rds.rdsD, 5) ? -rds.rdsD & 0x3f : rds.rdsD & 0x3f) / 2); + rds.hour += rds.offset; + rds.hour = (((byte)rds.hour + 24) % 24); + } + if (((rds.rdsD >> 6) & 0x3f) < 60) rds.minute = (rds.rdsD >> 6) & 0x3f; rds.hasCT = true; } } break;