diff --git a/Controllers/QMKController/QMKOpenRGBController/QMKOpenRGBRev9Controller/RGBController_QMKOpenRGBRev9.cpp b/Controllers/QMKController/QMKOpenRGBController/QMKOpenRGBRev9Controller/RGBController_QMKOpenRGBRev9.cpp index 7d8c8e1e3..32ab8f5e4 100644 --- a/Controllers/QMKController/QMKOpenRGBController/QMKOpenRGBRev9Controller/RGBController_QMKOpenRGBRev9.cpp +++ b/Controllers/QMKController/QMKOpenRGBController/QMKOpenRGBRev9Controller/RGBController_QMKOpenRGBRev9.cpp @@ -525,6 +525,15 @@ unsigned int RGBController_QMKOpenRGBRev9::CalculateDivisor counts[i]++; } + /*---------------------------------------------------------*\ + | Guard against empty distances (malformed LED data) | + \*---------------------------------------------------------*/ + if(distances.empty()) + { + LOG_WARNING("[%s] No valid LED distances found, using default divisor of 1", name.c_str()); + return 1; + } + unsigned int divisor = distances[0]; for(const std::pair &i : counts) { @@ -533,6 +542,13 @@ unsigned int RGBController_QMKOpenRGBRev9::CalculateDivisor divisor = i.first; } } + + if(divisor == 0) + { + LOG_WARNING("[%s] Calculated divisor is 0, using default of 1. This may indicate malformed LED position data.", name.c_str()); + return 1; + } + return divisor; } diff --git a/Controllers/QMKController/QMKOpenRGBController/QMKOpenRGBRevBController/RGBController_QMKOpenRGBRevB.cpp b/Controllers/QMKController/QMKOpenRGBController/QMKOpenRGBRevBController/RGBController_QMKOpenRGBRevB.cpp index 0db0bf7b8..6edd3b69d 100644 --- a/Controllers/QMKController/QMKOpenRGBController/QMKOpenRGBRevBController/RGBController_QMKOpenRGBRevB.cpp +++ b/Controllers/QMKController/QMKOpenRGBController/QMKOpenRGBRevBController/RGBController_QMKOpenRGBRevB.cpp @@ -560,6 +560,16 @@ unsigned int RGBController_QMKOpenRGBRevB::CalculateDivisor last_pos = pt.x; }); } + + /*---------------------------------------------------------*\ + | Guard against empty distances (malformed LED data) | + \*---------------------------------------------------------*/ + if(distances.empty()) + { + LOG_WARNING("[%s] No valid LED distances found, using default divisor of 1", name.c_str()); + return 1; + } + std::map counts; for(const int &i : distances) { @@ -574,6 +584,16 @@ unsigned int RGBController_QMKOpenRGBRevB::CalculateDivisor divisor = i.first; } } + + /*---------------------------------------------------------*\ + | Guard against zero divisor (prevents division by zero) | + \*---------------------------------------------------------*/ + if(divisor == 0) + { + LOG_WARNING("[%s] Calculated divisor is 0, using default of 1. This may indicate malformed LED position data.", name.c_str()); + return 1; + } + return divisor; } diff --git a/Controllers/QMKController/QMKOpenRGBController/QMKOpenRGBRevDController/RGBController_QMKOpenRGBRevD.cpp b/Controllers/QMKController/QMKOpenRGBController/QMKOpenRGBRevDController/RGBController_QMKOpenRGBRevD.cpp index 8a44a7652..f15568690 100644 --- a/Controllers/QMKController/QMKOpenRGBController/QMKOpenRGBRevDController/RGBController_QMKOpenRGBRevD.cpp +++ b/Controllers/QMKController/QMKOpenRGBController/QMKOpenRGBRevDController/RGBController_QMKOpenRGBRevD.cpp @@ -567,6 +567,15 @@ unsigned int RGBController_QMKOpenRGBRevD::CalculateDivisor counts[i]++; } + /*---------------------------------------------------------*\ + | Guard against empty distances (malformed LED data) | + \*---------------------------------------------------------*/ + if(distances.empty()) + { + LOG_WARNING("[%s] No valid LED distances found, using default divisor of 1", name.c_str()); + return 1; + } + unsigned int divisor = distances[0]; for(const std::pair &i : counts) { @@ -575,6 +584,13 @@ unsigned int RGBController_QMKOpenRGBRevD::CalculateDivisor divisor = i.first; } } + + if(divisor == 0) + { + LOG_WARNING("[%s] Calculated divisor is 0, using default of 1. This may indicate malformed LED position data.", name.c_str()); + return 1; + } + return divisor; } diff --git a/Controllers/QMKController/QMKOpenRGBController/QMKOpenRGBRevEController/RGBController_QMKOpenRGBRevE.cpp b/Controllers/QMKController/QMKOpenRGBController/QMKOpenRGBRevEController/RGBController_QMKOpenRGBRevE.cpp index 8ed55efdd..df35d2ed8 100644 --- a/Controllers/QMKController/QMKOpenRGBController/QMKOpenRGBRevEController/RGBController_QMKOpenRGBRevE.cpp +++ b/Controllers/QMKController/QMKOpenRGBController/QMKOpenRGBRevEController/RGBController_QMKOpenRGBRevE.cpp @@ -583,6 +583,15 @@ unsigned int RGBController_QMKOpenRGBRevE::CalculateDivisor counts[i]++; } + /*---------------------------------------------------------*\ + | Guard against empty distances (malformed LED data) | + \*---------------------------------------------------------*/ + if(distances.empty()) + { + LOG_WARNING("[%s] No valid LED distances found, using default divisor of 1", name.c_str()); + return 1; + } + unsigned int divisor = distances[0]; for(const std::pair &i : counts) { @@ -591,6 +600,13 @@ unsigned int RGBController_QMKOpenRGBRevE::CalculateDivisor divisor = i.first; } } + + if(divisor == 0) + { + LOG_WARNING("[%s] Calculated divisor is 0, using default of 1. This may indicate malformed LED position data.", name.c_str()); + return 1; + } + return divisor; }