Re: [PATCH 1/1] Fix date checking in case if time was not initialized.
- From
Mike Gorchak <mike.gorchak.qnx@gmail.com>
- Date
- Feb 25, 2013, 19:32 UTC
- Message-ID
- <CAHXAxrOjSS5jGLcCw4KTxP_F_uRQhi0cPSvzbx58jx9dP25XPA@mail.gmail.com>
- 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.