On Jan 17, 2007, at 12:23 PM, Ruediger Pluem wrote:
On 01/15/2007 01:56 PM, Bart van der Schans wrote:
In r463496 the following check was added to mod_cache.c :

    else if (exp != APR_DATE_BAD && exp < r->request_time)
    {
        /* if a Expires header is in the past, don't cache it */
        reason = "Expires header already expired, not cacheable";
    }

This check fails to correctly identify the expires header "Thu, 01 Jan
1970 00:00:00 GMT". The apr_date_parse_http function(exps) returns
(apr_time_t)0 which is equal to APR_DATE_BAD, but it should recognize it
as an already expired header. Is there a way to distinct between
APR_DATE_BAD and the unix epoch? Or is that considered a bad date?

I would say 0 is not a bad day. But if this is a bug it is an APR(- util) bug.
Thus I forward it to the apr dev list.

No, it is a bug in the expression.  A date is an unsigned value and any
error is specifically forced to 0 so that the comparison

   if (exp < r->request_time)

will be true if exp == APR_DATE_BAD (as is desired in this case).

....Roy

Reply via email to