summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlat9nq <22451773+lat9nq@users.noreply.github.com>2023-06-20 15:49:47 -0400
committerlat9nq <22451773+lat9nq@users.noreply.github.com>2023-06-20 15:54:05 -0400
commitfd5d7947f614d837cb3b08e132a025c4e1536d37 (patch)
tree682ddeaf8d3097e35aa7ff0ec70345df5577d185
parenta67bdeb2c244419c5b50fc3975d4efefcdfcc855 (diff)
time_zone_manager: Stop on comma
This is a deviation from the reference time zone implementation. The actual code will set a pointer to the time zone name here, but for us we have a limited number of characters to work with, and the name of the time zone here could be larger than 8 characters. We can make the assumption that time zone names greater than five characters in length include a comma that denotes more data. Nintendo just truncates that data for the name, so we can do the same. time_zone_manager: Check for length of array Just to be double sure that we never break past the array length, directly compare against it.
-rw-r--r--src/core/hle/service/time/time_zone_manager.cpp4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/core/hle/service/time/time_zone_manager.cpp b/src/core/hle/service/time/time_zone_manager.cpp
index 63aacd19f..43d0a19b8 100644
--- a/src/core/hle/service/time/time_zone_manager.cpp
+++ b/src/core/hle/service/time/time_zone_manager.cpp
@@ -911,7 +911,9 @@ static Result ToCalendarTimeInternal(const TimeZoneRule& rules, s64 time,
calendar_additional_info.is_dst = rules.ttis[tti_index].is_dst;
const char* time_zone{&rules.chars[rules.ttis[tti_index].abbreviation_list_index]};
- for (int index{}; time_zone[index] != '\0'; ++index) {
+ for (u32 index{}; time_zone[index] != '\0' && time_zone[index] != ',' &&
+ index < calendar_additional_info.timezone_name.size() - 1;
+ ++index) {
calendar_additional_info.timezone_name[index] = time_zone[index];
}
return ResultSuccess;