parsing: show a better error for illegal month/day numbers in dates

This commit is contained in:
Simon Michael 2010-04-06 02:31:47 +00:00
parent cd8dffc485
commit b2c8933af4
2 changed files with 17 additions and 3 deletions

View File

@ -262,11 +262,10 @@ ymd = do
y <- many1 digit y <- many1 digit
datesepchar datesepchar
m <- try (count 2 digit) <|> count 1 digit m <- try (count 2 digit) <|> count 1 digit
guard (read m >= 1 && (read m <= 12)) when (read m < 1 || (read m > 12)) $ error $ "bad month number: " ++ m
-- when (read m < 1 || (read m > 12)) $ fail "bad month number specified"
datesepchar datesepchar
d <- try (count 2 digit) <|> count 1 digit d <- try (count 2 digit) <|> count 1 digit
when (read d < 1 || (read d > 31)) $ fail "bad day number specified" when (read d < 1 || (read d > 31)) $ error $ "bad day number: " ++ d
return $ (y,m,d) return $ (y,m,d)
ym :: GenParser Char st SmartDate ym :: GenParser Char st SmartDate

15
tests/parse-dates.test Normal file
View File

@ -0,0 +1,15 @@
# dates with bad month or day numbers should be rejected
-f- print
<<<
2010/31/12 x
a 1
b
>>>2 /bad month number: 31/
>>>= 1
-f- print
<<<
2010/12/32 x
a 1
b
>>>2 /bad day number: 32/
>>>= 1