Skip to content

Commit e60c1a4

Browse files
committed
Prevent unintended lazy initialization in CreateCustomTimeZone
1 parent 6d113e0 commit e60c1a4

File tree

2 files changed

+12
-33
lines changed

2 files changed

+12
-33
lines changed

src/libraries/System.Private.CoreLib/src/System/TimeZoneInfo.Win32.cs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -154,11 +154,8 @@ private TimeZoneInfo(in TIME_ZONE_INFORMATION zone, bool dstDisabled)
154154

155155
ValidateTimeZoneInfo(_id, _baseUtcOffset, _adjustmentRules, out _supportsDaylightSavingTime);
156156
_displayName = standardName;
157-
_displayNameSet = true;
158157
_standardDisplayName = standardName;
159-
_standardDisplayNameSet = true;
160158
_daylightDisplayName = zone.GetDaylightName();
161-
_daylightDisplayNameSet = true;
162159
}
163160

164161
/// <summary>

src/libraries/System.Private.CoreLib/src/System/TimeZoneInfo.cs

Lines changed: 12 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -44,11 +44,8 @@ private enum TimeZoneInfoResult
4444
private const int MaxKeyLength = 255;
4545

4646
private readonly string _id;
47-
private bool _displayNameSet;
4847
private string? _displayName;
49-
private bool _standardDisplayNameSet;
5048
private string? _standardDisplayName;
51-
private bool _daylightDisplayNameSet;
5249
private string? _daylightDisplayName;
5350
private readonly TimeSpan _baseUtcOffset;
5451
private readonly bool _supportsDaylightSavingTime;
@@ -153,11 +150,8 @@ public string DisplayName
153150
{
154151
get
155152
{
156-
if (_displayName == null && !_displayNameSet)
157-
{
153+
if (_displayName == null)
158154
Interlocked.CompareExchange(ref _displayName, PopulateDisplayName(), null);
159-
_displayNameSet = true;
160-
}
161155

162156
return _displayName ?? string.Empty;
163157
}
@@ -167,11 +161,8 @@ public string StandardName
167161
{
168162
get
169163
{
170-
if (_standardDisplayName == null && !_standardDisplayNameSet)
171-
{
164+
if (_standardDisplayName == null)
172165
Interlocked.CompareExchange(ref _standardDisplayName, PopulateStandardDisplayName(), null);
173-
_standardDisplayNameSet = true;
174-
}
175166

176167
return _standardDisplayName ?? string.Empty;
177168
}
@@ -181,11 +172,8 @@ public string DaylightName
181172
{
182173
get
183174
{
184-
if (_daylightDisplayName == null && !_daylightDisplayNameSet)
185-
{
175+
if (_daylightDisplayName == null)
186176
Interlocked.CompareExchange(ref _daylightDisplayName, PopulateDaylightDisplayName(), null);
187-
_daylightDisplayNameSet = true;
188-
}
189177

190178
return _daylightDisplayName ?? string.Empty;
191179
}
@@ -1002,11 +990,8 @@ private TimeZoneInfo(
1002990
_id = id;
1003991
_baseUtcOffset = baseUtcOffset;
1004992
_displayName = displayName;
1005-
_displayNameSet = true;
1006993
_standardDisplayName = standardDisplayName;
1007-
_standardDisplayNameSet = true;
1008994
_daylightDisplayName = disableDaylightSavingTime ? null : daylightDisplayName;
1009-
_daylightDisplayNameSet = true;
1010995
_supportsDaylightSavingTime = adjustmentRulesSupportDst && !disableDaylightSavingTime;
1011996
_adjustmentRules = adjustmentRules;
1012997

@@ -1027,9 +1012,9 @@ public static TimeZoneInfo CreateCustomTimeZone(
10271012
return new TimeZoneInfo(
10281013
id,
10291014
baseUtcOffset,
1030-
displayName,
1031-
standardDisplayName,
1032-
standardDisplayName,
1015+
displayName ?? string.Empty,
1016+
standardDisplayName ?? string.Empty,
1017+
standardDisplayName ?? string.Empty,
10331018
adjustmentRules: null,
10341019
disableDaylightSavingTime: false,
10351020
hasIanaId);
@@ -1049,9 +1034,9 @@ public static TimeZoneInfo CreateCustomTimeZone(
10491034
return CreateCustomTimeZone(
10501035
id,
10511036
baseUtcOffset,
1052-
displayName,
1053-
standardDisplayName,
1054-
daylightDisplayName,
1037+
displayName ?? string.Empty,
1038+
standardDisplayName ?? string.Empty,
1039+
daylightDisplayName ?? string.Empty,
10551040
adjustmentRules,
10561041
disableDaylightSavingTime: false);
10571042
}
@@ -1078,9 +1063,9 @@ public static TimeZoneInfo CreateCustomTimeZone(
10781063
return new TimeZoneInfo(
10791064
id,
10801065
baseUtcOffset,
1081-
displayName,
1082-
standardDisplayName,
1083-
daylightDisplayName,
1066+
displayName ?? string.Empty,
1067+
standardDisplayName ?? string.Empty,
1068+
daylightDisplayName ?? string.Empty,
10841069
adjustmentRules,
10851070
disableDaylightSavingTime,
10861071
hasIanaId);
@@ -1151,11 +1136,8 @@ private TimeZoneInfo(SerializationInfo info, StreamingContext context)
11511136

11521137
_id = (string)info.GetValue("Id", typeof(string))!; // Do not rename (binary serialization)
11531138
_displayName = (string?)info.GetValue("DisplayName", typeof(string)); // Do not rename (binary serialization)
1154-
_displayNameSet = true;
11551139
_standardDisplayName = (string?)info.GetValue("StandardName", typeof(string)); // Do not rename (binary serialization)
1156-
_standardDisplayNameSet = true;
11571140
_daylightDisplayName = (string?)info.GetValue("DaylightName", typeof(string)); // Do not rename (binary serialization)
1158-
_daylightDisplayNameSet = true;
11591141
_baseUtcOffset = (TimeSpan)info.GetValue("BaseUtcOffset", typeof(TimeSpan))!; // Do not rename (binary serialization)
11601142
_adjustmentRules = (AdjustmentRule[]?)info.GetValue("AdjustmentRules", typeof(AdjustmentRule[])); // Do not rename (binary serialization)
11611143
_supportsDaylightSavingTime = (bool)info.GetValue("SupportsDaylightSavingTime", typeof(bool))!; // Do not rename (binary serialization)

0 commit comments

Comments
 (0)