From f8610e59d52e5575ab1754f7a0fbb9b65908ca67 Mon Sep 17 00:00:00 2001 From: Bob Arnson Date: Thu, 17 Jul 2025 22:53:40 -0400 Subject: Better date/time checking/error message. Fixes https://github.com/wixtoolset/issues/issues/9120 --- src/api/wix/WixToolset.Data/ErrorMessages.cs | 2 +- src/wix/WixToolset.Core/CompilerCore.cs | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/api/wix/WixToolset.Data/ErrorMessages.cs b/src/api/wix/WixToolset.Data/ErrorMessages.cs index 4d986b7a..7175b0fd 100644 --- a/src/api/wix/WixToolset.Data/ErrorMessages.cs +++ b/src/api/wix/WixToolset.Data/ErrorMessages.cs @@ -1163,7 +1163,7 @@ namespace WixToolset.Data public static Message InvalidDateTimeFormat(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value) { - return Message(sourceLineNumbers, Ids.InvalidDateTimeFormat, "The {0}/@{1} attribute's value '{2}' is not a valid date/time value. A date/time value should follow the format YYYY-MM-DDTHH:mm:ss.", elementName, attributeName, value); + return Message(sourceLineNumbers, Ids.InvalidDateTimeFormat, "The {0}/@{1} attribute's value '{2}' is not a valid date/time value. A date/time value should follow the format YYYY-MM-DDTHH:mm:ss and be a valid date and time between 1980 and 2043, inclusive.", elementName, attributeName, value); } public static Message InvalidDocumentElement(SourceLineNumber sourceLineNumbers, string elementName, string fileType, string expectedElementName) diff --git a/src/wix/WixToolset.Core/CompilerCore.cs b/src/wix/WixToolset.Core/CompilerCore.cs index 8d1c7e0a..57d84c3a 100644 --- a/src/wix/WixToolset.Core/CompilerCore.cs +++ b/src/wix/WixToolset.Core/CompilerCore.cs @@ -550,6 +550,11 @@ namespace WixToolset.Core { DateTime date = DateTime.Parse(value, CultureInfo.InvariantCulture.DateTimeFormat); + if (date.Year < 1980 || date.Year > 2043) + { + this.Write(ErrorMessages.InvalidDateTimeFormat(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value)); + } + return ((((date.Year - 1980) * 512) + (date.Month * 32 + date.Day)) * 65536) + (date.Hour * 2048) + (date.Minute * 32) + (date.Second / 2); } -- cgit v1.2.3-55-g6feb