diff options
author | Lioncash <mathew1800@gmail.com> | 2022-12-05 21:26:00 -0500 |
---|---|---|
committer | Lioncash <mathew1800@gmail.com> | 2022-12-05 21:31:34 -0500 |
commit | e7f9f58fa408ac89ed1ce709494d84090b63bff0 (patch) | |
tree | fb5caf9dc17fe8639d5a9138727f1adf3c8961fc /src/core | |
parent | 3b19f741bd6a19f603858e6cdf8db41516c7075f (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')
-rw-r--r-- | src/core/reporter.cpp | 8 | ||||
-rw-r--r-- | src/core/reporter.h | 4 |
2 files changed, 6 insertions, 6 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)); diff --git a/src/core/reporter.h b/src/core/reporter.h index 68755cbde..983a9545a 100644 --- a/src/core/reporter.h +++ b/src/core/reporter.h @@ -61,8 +61,8 @@ public: // Used by error applet void 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; void SaveFSAccessLog(std::string_view log_message) const; |