summaryrefslogtreecommitdiff
path: root/src/core/reporter.cpp
diff options
context:
space:
mode:
authorLioncash <mathew1800@gmail.com>2022-12-05 21:26:00 -0500
committerLioncash <mathew1800@gmail.com>2022-12-05 21:31:34 -0500
commite7f9f58fa408ac89ed1ce709494d84090b63bff0 (patch)
treefb5caf9dc17fe8639d5a9138727f1adf3c8961fc /src/core/reporter.cpp
parent3b19f741bd6a19f603858e6cdf8db41516c7075f (diff)
reporter: Eliminate undefined behavior in SaveErrorReport
The optionals are unconditionally dereferenced when setting the custom error text, and in a few cases this function is called using the default value of the optionals. This means we'd be dereferencing uninitialized storage. Since they're used unconditionally, we can use value_or to set a default when storage is uninitialized.
Diffstat (limited to 'src/core/reporter.cpp')
-rw-r--r--src/core/reporter.cpp8
1 files changed, 4 insertions, 4 deletions
diff --git a/src/core/reporter.cpp b/src/core/reporter.cpp
index 6e21296f6..543b91d9a 100644
--- a/src/core/reporter.cpp
+++ b/src/core/reporter.cpp
@@ -339,8 +339,8 @@ void Reporter::SavePlayReport(PlayReportType type, u64 title_id, std::vector<std
}
void Reporter::SaveErrorReport(u64 title_id, Result result,
- std::optional<std::string> custom_text_main,
- std::optional<std::string> custom_text_detail) const {
+ const std::optional<std::string>& custom_text_main,
+ const std::optional<std::string>& custom_text_detail) const {
if (!IsReportingEnabled()) {
return;
}
@@ -354,8 +354,8 @@ void Reporter::SaveErrorReport(u64 title_id, Result result,
out["backtrace"] = GetBacktraceData(system);
out["error_custom_text"] = {
- {"main", *custom_text_main},
- {"detail", *custom_text_detail},
+ {"main", custom_text_main.value_or("")},
+ {"detail", custom_text_detail.value_or("")},
};
SaveToFile(std::move(out), GetPath("error_report", title_id, timestamp));