Handle event log parsing errors without crashing.

Instead of crashing when encountering an event log that cannot be parsed
it is better to print an error message, skip the file and continue.

Bug: webrtc:10337
Change-Id: I5dbca18e456c14e5a92af068f82e88cb17e8de9c
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/133185
Reviewed-by: Minyue Li <minyue@webrtc.org>
Commit-Queue: Ivo Creusen <ivoc@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#27727}
This commit is contained in:
Ivo Creusen
2019-04-16 14:25:26 +02:00
committed by Commit Bot
parent 70a596386d
commit 67fb919b5e
2 changed files with 22 additions and 8 deletions

View File

@ -22,15 +22,23 @@ namespace test {
NetEqEventLogInput* NetEqEventLogInput::CreateFromFile(
const std::string& file_name,
absl::optional<uint32_t> ssrc_filter) {
return new NetEqEventLogInput(
RtcEventLogSource::CreateFromFile(file_name, ssrc_filter));
auto event_log_src =
RtcEventLogSource::CreateFromFile(file_name, ssrc_filter);
if (!event_log_src) {
return nullptr;
}
return new NetEqEventLogInput(std::move(event_log_src));
}
NetEqEventLogInput* NetEqEventLogInput::CreateFromString(
const std::string& file_contents,
absl::optional<uint32_t> ssrc_filter) {
return new NetEqEventLogInput(
RtcEventLogSource::CreateFromString(file_contents, ssrc_filter));
auto event_log_src =
RtcEventLogSource::CreateFromString(file_contents, ssrc_filter);
if (!event_log_src) {
return nullptr;
}
return new NetEqEventLogInput(std::move(event_log_src));
}
absl::optional<int64_t> NetEqEventLogInput::NextOutputEventTime() const {

View File

@ -41,8 +41,11 @@ std::unique_ptr<RtcEventLogSource> RtcEventLogSource::CreateFromFile(
absl::optional<uint32_t> ssrc_filter) {
auto source = std::unique_ptr<RtcEventLogSource>(new RtcEventLogSource());
ParsedRtcEventLog parsed_log;
RTC_CHECK(parsed_log.ParseFile(file_name));
RTC_CHECK(source->Initialize(parsed_log, ssrc_filter));
if (!parsed_log.ParseFile(file_name) ||
!source->Initialize(parsed_log, ssrc_filter)) {
std::cerr << "Error while parsing event log, skipping." << std::endl;
return nullptr;
}
return source;
}
@ -51,8 +54,11 @@ std::unique_ptr<RtcEventLogSource> RtcEventLogSource::CreateFromString(
absl::optional<uint32_t> ssrc_filter) {
auto source = std::unique_ptr<RtcEventLogSource>(new RtcEventLogSource());
ParsedRtcEventLog parsed_log;
RTC_CHECK(parsed_log.ParseString(file_contents));
RTC_CHECK(source->Initialize(parsed_log, ssrc_filter));
if (!parsed_log.ParseString(file_contents) ||
!source->Initialize(parsed_log, ssrc_filter)) {
std::cerr << "Error while parsing event log, skipping." << std::endl;
return nullptr;
}
return source;
}