Skip to content

Commit 0be9320

Browse files
authored
Logs extend invalid schedule delay tests (#3812)
1 parent 1c1a994 commit 0be9320

File tree

2 files changed

+36
-1
lines changed

2 files changed

+36
-1
lines changed

sdk/src/common/env_variables.cc

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,14 @@ static bool GetTimeoutFromString(const char *input, std::chrono::system_clock::d
9797

9898
for (; *input && std::isdigit(*input); ++input)
9999
{
100-
result = result * 10 + (*input - '0');
100+
auto digit = (*input - '0');
101+
102+
if (result > (std::numeric_limits<decltype(result)>::max() - digit) / 10)
103+
{
104+
// Rejecting overflow as invalid.
105+
return false;
106+
}
107+
result = result * 10 + digit;
101108
}
102109

103110
if (result == 0)

sdk/test/logs/batch_log_record_processor_test.cc

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -407,6 +407,34 @@ TEST_F(BatchLogRecordProcessorTest, TestScheduleDelayInvalidValueFromEnv)
407407
unsetenv("OTEL_BLRP_SCHEDULE_DELAY");
408408
}
409409

410+
TEST_F(BatchLogRecordProcessorTest, TestScheduleDelayInvalidEdgeCasesFromEnv)
411+
{
412+
struct TestCase
413+
{
414+
const char *value;
415+
const char *description;
416+
};
417+
418+
const std::vector<TestCase> cases = {
419+
{"-5ms", "negative duration"},
420+
{"0ms", "zero duration"},
421+
{"999999999999999999999s", "overflow"},
422+
{"", "empty string"},
423+
};
424+
425+
for (const auto &tc : cases)
426+
{
427+
setenv("OTEL_BLRP_SCHEDULE_DELAY", tc.value, 1);
428+
429+
BatchLogRecordProcessorOptions options;
430+
431+
EXPECT_EQ(options.schedule_delay_millis, std::chrono::milliseconds(1000))
432+
<< "Failed for case: " << tc.description << " (value='" << tc.value << "')";
433+
434+
unsetenv("OTEL_BLRP_SCHEDULE_DELAY");
435+
}
436+
}
437+
410438
TEST_F(BatchLogRecordProcessorTest, TestExportTimeoutFromEnv)
411439
{
412440
setenv("OTEL_BLRP_EXPORT_TIMEOUT", "250ms", 1);

0 commit comments

Comments
 (0)