forked from OpenGamers/abaddon
validate iso8601 when parsing to snowflake
This commit is contained in:
parent
17c1f913df
commit
d6da646d87
|
@ -1923,7 +1923,7 @@ void DiscordClient::HandleGatewayUserGuildSettingsUpdate(const GatewayMessage &m
|
|||
if (override.Muted) {
|
||||
if (override.MuteConfig.EndTime.has_value()) {
|
||||
const auto end = Snowflake::FromISO8601(*override.MuteConfig.EndTime);
|
||||
if (end > now)
|
||||
if (end.IsValid() && end > now)
|
||||
now_muted_channels.insert(override.ChannelID);
|
||||
} else {
|
||||
now_muted_channels.insert(override.ChannelID);
|
||||
|
@ -2325,7 +2325,7 @@ void DiscordClient::HandleReadyGuildSettings(const ReadyEventData &data) {
|
|||
if (entry.Muted) {
|
||||
if (entry.MuteConfig.EndTime.has_value()) {
|
||||
const auto end = Snowflake::FromISO8601(*entry.MuteConfig.EndTime);
|
||||
if (end > now)
|
||||
if (end.IsValid() && end > now)
|
||||
m_muted_guilds.insert(entry.GuildID);
|
||||
} else {
|
||||
m_muted_guilds.insert(entry.GuildID);
|
||||
|
@ -2335,7 +2335,7 @@ void DiscordClient::HandleReadyGuildSettings(const ReadyEventData &data) {
|
|||
if (override.Muted) {
|
||||
if (override.MuteConfig.EndTime.has_value()) {
|
||||
const auto end = Snowflake::FromISO8601(*override.MuteConfig.EndTime);
|
||||
if (end > now)
|
||||
if (end.IsValid() && end > now)
|
||||
m_muted_channels.insert(override.ChannelID);
|
||||
} else {
|
||||
m_muted_channels.insert(override.ChannelID);
|
||||
|
|
|
@ -42,9 +42,11 @@ Snowflake Snowflake::FromNow() {
|
|||
Snowflake Snowflake::FromISO8601(std::string_view ts) {
|
||||
int yr, mon, day, hr, min, sec, tzhr, tzmin;
|
||||
float milli;
|
||||
std::sscanf(ts.data(), "%d-%d-%dT%d:%d:%d%f+%d:%d",
|
||||
&yr, &mon, &day, &hr, &min, &sec, &milli, &tzhr, &tzmin);
|
||||
return SecondsInterval * (util::TimeToEpoch(yr, mon, day, hr, min, sec) - DiscordEpochSeconds) + static_cast<uint64_t>(milli * static_cast<float>(SecondsInterval));
|
||||
if (std::sscanf(ts.data(), "%d-%d-%dT%d:%d:%d%f+%d:%d",
|
||||
&yr, &mon, &day, &hr, &min, &sec, &milli, &tzhr, &tzmin) != 9) return Snowflake::Invalid;
|
||||
const auto epoch = util::TimeToEpoch(yr, mon, day, hr, min, sec);
|
||||
if (epoch < DiscordEpochSeconds) return Snowflake::Invalid;
|
||||
return SecondsInterval * (epoch - DiscordEpochSeconds) + static_cast<uint64_t>(milli * static_cast<float>(SecondsInterval));
|
||||
}
|
||||
|
||||
bool Snowflake::IsValid() const {
|
||||
|
|
Loading…
Reference in New Issue
Block a user