time_t is an int (apr_int64_t on my machine). The lgc routine output is being casting to apr_uint32_t and then to apr_int64_t = time_t.
Depending on platforms handling of sign extension this may lead to values for guess > INT_MAX (i.e guess will never be < 0)
This creates a date > the wrap year 2039.  Result is newsecs != secstodate -> failure
Patch casts the lgc output into an apr_int32_t first and then into time_t = apr_int64_t
FYI anyone who knows guts of generating date here's an example of a failure without this patch:
guess = secstodate = x'fa637fc5' ==  4200824773 (> INT_MAX so the *= -1 has no effect)
date generated by gm_timestr_822:     Tue, 12 Feb 2103 15:46:13 GMT
after secstodate *= APR_USEC_PER_SEC:
      secstodate x'eeca0bc5bbb40' == 4200824773000000  vs. newsecs hex x'eec8c9e845b40' == 4200738373000000
PS- i ran newsecs back through gm_timestr_822 to see what it generated and got:
Mon, 11 Feb 2103 15:46:13 GMT   (month and yr match secstodate results, but date and day are +/- 1)