From a3b6a374d74c84e73fa7d6a64d6d379f072b2b8a Mon Sep 17 00:00:00 2001 From: Gonzalo Diaz Date: Wed, 24 Jun 2026 17:50:00 -0400 Subject: [PATCH 1/2] [BUGFIX] [Hacker Rank] Warmup: Time Conversion: "tainted value 'hour' is leaking" --- .../exercises/src/hackerrank/warmup/time_conversion.cpp | 9 ++++++++- .../unit/lib/hackerrank/warmup/test_conversion.test.cpp | 5 +++++ .../lib/hackerrank/warmup/time_conversion.testcases.json | 3 ++- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/lib/exercises/src/hackerrank/warmup/time_conversion.cpp b/src/lib/exercises/src/hackerrank/warmup/time_conversion.cpp index a9f74c4..1971c11 100644 --- a/src/lib/exercises/src/hackerrank/warmup/time_conversion.cpp +++ b/src/lib/exercises/src/hackerrank/warmup/time_conversion.cpp @@ -41,6 +41,10 @@ std::string timeConversion(const std::string &s) { int hour; hour_str >> hour; + if (hour < 0 || hour > 23) { + throw std::invalid_argument("Invalid hour value: " + std::to_string(hour)); + } + if (hour >= 12) { hour = 0; } @@ -51,7 +55,10 @@ std::string timeConversion(const std::string &s) { hour_str.str(""); hour_str.clear(); - hour_str << std::setfill('0') << std::setw(2) << hour; + const int safe_hour = hour; + + hour_str << std::setfill('0') << std::setw(2) << safe_hour; + time[0] = hour_str.str(); std::string conversion; diff --git a/src/tests/unit/lib/hackerrank/warmup/test_conversion.test.cpp b/src/tests/unit/lib/hackerrank/warmup/test_conversion.test.cpp index d29460f..1c74b3a 100644 --- a/src/tests/unit/lib/hackerrank/warmup/test_conversion.test.cpp +++ b/src/tests/unit/lib/hackerrank/warmup/test_conversion.test.cpp @@ -36,3 +36,8 @@ TEST_CASE("time_conversion helper functions edge cases", CHECK(hackerrank::warmup::firstN("", 0) == ""); CHECK(hackerrank::warmup::lastN("", 0) == ""); } + +TEST_CASE("time_conversion invalid input", "[hackerrank] [invalid] [warmup]") { + CHECK_THROWS_AS(hackerrank::warmup::timeConversion("25:01:00AM"), + std::invalid_argument); +} diff --git a/src/tests/unit/lib/hackerrank/warmup/time_conversion.testcases.json b/src/tests/unit/lib/hackerrank/warmup/time_conversion.testcases.json index 16c374f..c4f4db4 100644 --- a/src/tests/unit/lib/hackerrank/warmup/time_conversion.testcases.json +++ b/src/tests/unit/lib/hackerrank/warmup/time_conversion.testcases.json @@ -1,4 +1,5 @@ [ { "input": "12:01:00PM", "expected": "12:01:00" }, - { "input": "12:01:00AM", "expected": "00:01:00" } + { "input": "12:01:00AM", "expected": "00:01:00" }, + { "input": "06:01:00PM", "expected": "18:01:00" } ] From bad4b7f9cc1dc91b335a73b34cebb1dde3d8ba2f Mon Sep 17 00:00:00 2001 From: Gonzalo Diaz Date: Thu, 25 Jun 2026 11:46:45 -0400 Subject: [PATCH 2/2] [BUGFIX] [Hacker Rank] Warmup: Time Conversion: "tainted value 'hour' is leaking" --- src/lib/exercises/src/hackerrank/warmup/time_conversion.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/lib/exercises/src/hackerrank/warmup/time_conversion.cpp b/src/lib/exercises/src/hackerrank/warmup/time_conversion.cpp index 1971c11..09f6fef 100644 --- a/src/lib/exercises/src/hackerrank/warmup/time_conversion.cpp +++ b/src/lib/exercises/src/hackerrank/warmup/time_conversion.cpp @@ -55,9 +55,8 @@ std::string timeConversion(const std::string &s) { hour_str.str(""); hour_str.clear(); - const int safe_hour = hour; - hour_str << std::setfill('0') << std::setw(2) << safe_hour; + hour_str << std::setfill('0') << std::setw(2) << (hour % 24); time[0] = hour_str.str();