From: Mike Gorchak Date: Mon, 25 Feb 2013 19:32:52 GMT Subject: Re: [PATCH 1/1] Fix date checking in case if time was not initialized. Message-ID: In-Reply-To: <7vr4k4xlie.fsf@alter.siamese.dyndns.org> > The thing that puzzles me is that nobody reported that the following > fail on their platforms (and they do not fail for me on platforms I > have to test in my real/virtual boxes). Ok, check_parse calls function parse_date(), it calls parse_date_basic(), where following code is present: memset(&tm, 0, sizeof(tm)); tm.tm_year = -1; tm.tm_mon = -1; tm.tm_mday = -1; tm.tm_isdst = -1; tm.tm_hour = -1; tm.tm_min = -1; tm.tm_sec = -1; Almost all fields are set to -1. A bit later match_multi_number() is called. It parses the date and calls is_date() with partially filled tm structure, where all time fields: tm_hour, tm_min, tm_sec are set to -1. tm_to_time_t() function is called by is_date() and has special check: if (tm->tm_hour < 0 || tm->tm_min < 0 || tm->tm_sec < 0) return -1; So is_date() always return negative result for the text string where date is placed before time like '2008-02-14 20:30:45'. It must fail on other platforms as well.