summaryrefslogtreecommitdiff
path: root/mail/mush/patches/patch-al
blob: 199a58c8b84aacedde49cb8467edccd2c3fdf981 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
$NetBSD: patch-al,v 1.3 2021/05/20 19:21:13 christos Exp $

--- dates.c.orig	2021-05-20 15:01:53.692058779 -0400
+++ dates.c	2021-05-20 15:14:15.931558100 -0400
@@ -101,7 +101,7 @@
 {
     long year, julian;
 
-    if (tym->tm_year < 100)
+    if (tym->tm_year < 1000)
 	year = tym->tm_year + 1900;
     if (year < 69)
 	year += 100;
@@ -123,7 +123,7 @@
     struct tm *T;
     char *tz;
 #if defined(SYSV) || defined(TIMEZONE) || defined(POSIX)
-    long	  x;
+    time_t	  x;
 
     (void) time(&x);
     T = localtime(&x);
@@ -172,7 +172,7 @@
     static char time_buf[30];
     struct tm 	  *T;
     register char *p = time_buf;
-    long	  x;
+    time_t	  x;
 
     if (!opts)
 	return NULL;
@@ -375,6 +375,11 @@
     }
     if (Year > 1900)
 	Year -= 1900;
+    else if (Year < 0) {
+	print("Unknown date format: %s\n", p);
+	return NULL;
+    }
+	
     if (!Month && (Month = month_to_n(month)) == -1) {
 	print("bad month: %s\n", p);
 	return NULL;
@@ -413,6 +418,7 @@
 char *Date, *Yr, *Mon, *Day, *Wkday, *Tm, *Zone, *ret_buf;
 {
     long gmt;
+    time_t tgmt;
     struct tm *T;
     char a_or_p, *p = ret_buf;
 
@@ -420,7 +426,8 @@
     (void) sscanf(Date, "%ld%3c%s", &gmt, Wkday, Zone);
     Wkday[3] = 0;
     gmt += getzoff(Zone);
-    T = gmtime(&gmt);
+    tgmt = gmt < 0 ? 0 : gmt;
+    T = gmtime(&tgmt);
     a_or_p = (T->tm_hour < 12)? 'a': 'p';
 
     (void) sprintf(Yr, "%d", T->tm_year + 1900);