forked from pool/patch
59 lines
2.0 KiB
Diff
59 lines
2.0 KiB
Diff
* str2time() will happily parse "\n" and similar; the result will be
|
|
undistinguishable from a valid timestamp. Avoid this by skipping
|
|
whitespace before and checking if anything remains first.
|
|
|
|
* Always parse timestamps in patch headers relative to the local timezone
|
|
or UTC so that pch_timestamp() will always contain reasonable values
|
|
if a timestamp is present: we may need the timestamps later.
|
|
|
|
* Change the bizarre logic which checks whether a timestamp is close to
|
|
the epoch by checking for exactly that. The result is the same, and we
|
|
won't have to parse the timestamp again.
|
|
|
|
---
|
|
util.c | 26 ++++++++++++--------------
|
|
1 file changed, 12 insertions(+), 14 deletions(-)
|
|
|
|
Index: b/util.c
|
|
===================================================================
|
|
--- a/util.c
|
|
+++ b/util.c
|
|
@@ -996,25 +996,23 @@ fetchname (char *at, int strip_leading,
|
|
if (*u != '\t' && strchr (u + 1, '\t'))
|
|
continue;
|
|
|
|
- if (set_time | set_utc)
|
|
- stamp = str2time (&u, initial_time,
|
|
- set_utc ? 0L : TM_LOCAL_ZONE);
|
|
- else
|
|
- {
|
|
+ while (ISSPACE((unsigned char) *u))
|
|
+ u++;
|
|
+ if (*u) {
|
|
+ stamp = str2time (&u, initial_time,
|
|
+ set_utc ? 0L : TM_LOCAL_ZONE);
|
|
+
|
|
/* The head says the file is nonexistent if the timestamp
|
|
is the epoch; but the listed time is local time, not UTC,
|
|
and POSIX.1 allows local time offset anywhere in the range
|
|
- -25:00 < offset < +26:00. Match any time in that
|
|
- range by assuming local time is -25:00 and then matching
|
|
- any ``local'' time T in the range 0 < T < 25+26 hours. */
|
|
- stamp = str2time (&u, initial_time, -25L * 60 * 60);
|
|
- if (0 < stamp && stamp < (25 + 26) * 60L * 60)
|
|
+ -25:00 < offset < +26:00. Match any time in that range. */
|
|
+ if (!(set_time || set_utc)
|
|
+ && 25 * 60L * 60 < stamp && stamp < 26 * 60L * 60)
|
|
stamp = 0;
|
|
- }
|
|
-
|
|
- if (*u && ! ISSPACE ((unsigned char) *u))
|
|
- stamp = (time_t) -1;
|
|
|
|
+ if (*u && ! ISSPACE ((unsigned char) *u))
|
|
+ stamp = (time_t) -1;
|
|
+ }
|
|
*t = '\0';
|
|
break;
|
|
}
|