From c2d598e998107fe4d483b1976ce2d6fd494c88a7 Mon Sep 17 00:00:00 2001 From: H.G. Muller Date: Mon, 20 May 2013 11:14:01 +0200 Subject: [PATCH] Make PGN parser immune to unprotected time stamps The parser choked on time stamps of the form dd:dd or dd:dd:dd if one of the fields happened to be 00, because it wouldmistake that for a non-compliant king-side castling. By excluding this interpretation when the 00 is immediately preceded or followed by ':' this is now prevented. --- parser.c | 4 +++- 1 files changed, 3 insertions(+), 1 deletions(-) diff --git a/parser.c b/parser.c index e0b4ff4..6da13d4 100644 --- a/parser.c +++ b/parser.c @@ -353,7 +353,7 @@ badMove:// we failed to find algebraic move } // ********* SAN Castings ************************************* - if(**p == 'O' || **p == 'o' || **p == '0') { + if(**p == 'O' || **p == 'o' || **p == '0' && !Match("00:", p)) { // exclude 00 in time stamps int castlingType = 0; if(Match("O-O-O", p) || Match("o-o-o", p) || Match("0-0-0", p) || Match("OOO", p) || Match("ooo", p) || Match("000", p)) castlingType = 2; @@ -532,6 +532,8 @@ badMove:// we failed to find algebraic move return Nothing; } + // ********* Prevent 00 in unprotected time stamps to be mistaken for castling ******* + if(Match(":00", p)) return Nothing; // ********* Could not match to anything. Return offending character **** (*p)++; -- 1.7.0.4