Clamp TL stamps to 0..int.MaxValue, mapping edge to DateTime.Min/MaxValueaa

This commit is contained in:
Wizou 2025-11-15 18:21:15 +01:00
parent 4ad2f0a212
commit e923d65d53

View file

@ -325,13 +325,14 @@ namespace TL
} }
internal static void WriteTLStamp(this BinaryWriter writer, DateTime datetime) internal static void WriteTLStamp(this BinaryWriter writer, DateTime datetime)
=> writer.Write(datetime == DateTime.MaxValue ? int.MaxValue : (int)(datetime.ToUniversalTime().Ticks / 10000000 - 62135596800L)); => writer.Write((int)Math.Min(Math.Max(datetime.ToUniversalTime().Ticks / 10000000 - 62135596800L, 0), int.MaxValue));
internal static DateTime ReadTLStamp(this BinaryReader reader) internal static DateTime ReadTLStamp(this BinaryReader reader) => reader.ReadInt32() switch
{ {
int unixstamp = reader.ReadInt32(); <= 0 => default,
return unixstamp == int.MaxValue ? DateTime.MaxValue : new((unixstamp + 62135596800L) * 10000000, DateTimeKind.Utc); int.MaxValue => DateTime.MaxValue,
} int unixstamp => new((unixstamp + 62135596800L) * 10000000, DateTimeKind.Utc)
};
internal static void WriteTLString(this BinaryWriter writer, string str) internal static void WriteTLString(this BinaryWriter writer, string str)
{ {