diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2023-03-20 14:25:05 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2023-03-20 14:30:48 +0200 |
commit | 387d98b80d9f383c4c7708a42444472cb89dd42b (patch) | |
tree | 4233a4e5fc05c3b80a10afafd6f7647542b283bc /libxsde/xsde/cxx/parser/validating/gmonth-day.cxx | |
parent | 92fd3c03c5123e8d886d5de642cfc8e4606d42e6 (diff) |
Add extra validation for date, dateTime, and gMonthDay per XML Schema 1.1
Diffstat (limited to 'libxsde/xsde/cxx/parser/validating/gmonth-day.cxx')
-rw-r--r-- | libxsde/xsde/cxx/parser/validating/gmonth-day.cxx | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/libxsde/xsde/cxx/parser/validating/gmonth-day.cxx b/libxsde/xsde/cxx/parser/validating/gmonth-day.cxx index a972855..5d5efd7 100644 --- a/libxsde/xsde/cxx/parser/validating/gmonth-day.cxx +++ b/libxsde/xsde/cxx/parser/validating/gmonth-day.cxx @@ -100,7 +100,28 @@ namespace xsde day_ = 10 * (d1 - '0') + (d2 - '0'); - if (day_ < 1 || day_ > 31) + // Validate day according to the XML Schema 1.1 specification: + // + // The day value must be no more than 30 if month is one of 4, 6, 9, + // or 11, and no more than 29 if month is 2. + // + unsigned short max_day = 31; + switch (month_) + { + case 4: + case 6: + case 9: + case 11: + max_day = 30; + break; + case 2: + max_day = 29; + break; + default: + break; + } + + if (day_ < 1 || day_ > max_day) { _schema_error (schema_error::invalid_gmonth_day_value); return; |