This repository was archived by the owner on Nov 9, 2017. It is now read-only.
File tree Expand file tree Collapse file tree 5 files changed +47
-4
lines changed Expand file tree Collapse file tree 5 files changed +47
-4
lines changed Original file line number Diff line number Diff line change @@ -338,6 +338,9 @@ all::
338
338
# Define TEST_GIT_INDEX_VERSION to 2, 3 or 4 to run the test suite
339
339
# with a different indexfile format version. If it isn't set the index
340
340
# file format used is index-v[23].
341
+ #
342
+ # Define GMTIME_UNRELIABLE_ERRORS if your gmtime() function does not
343
+ # return NULL when it receives a bogus time_t.
341
344
342
345
GIT-VERSION-FILE : FORCE
343
346
@$(SHELL_PATH ) ./GIT-VERSION-GEN
@@ -1489,6 +1492,11 @@ ifneq (,$(XDL_FAST_HASH))
1489
1492
BASIC_CFLAGS += -DXDL_FAST_HASH
1490
1493
endif
1491
1494
1495
+ ifdef GMTIME_UNRELIABLE_ERRORS
1496
+ COMPAT_OBJS += compat/gmtime.o
1497
+ BASIC_CFLAGS += -DGMTIME_UNRELIABLE_ERRORS
1498
+ endif
1499
+
1492
1500
ifeq ($(TCLTK_PATH ) ,)
1493
1501
NO_TCLTK = NoThanks
1494
1502
endif
Original file line number Diff line number Diff line change
1
+ #include "../git-compat-util.h"
2
+ #undef gmtime
3
+ #undef gmtime_r
4
+
5
+ struct tm * git_gmtime (const time_t * timep )
6
+ {
7
+ static struct tm result ;
8
+ return git_gmtime_r (timep , & result );
9
+ }
10
+
11
+ struct tm * git_gmtime_r (const time_t * timep , struct tm * result )
12
+ {
13
+ struct tm * ret ;
14
+
15
+ memset (result , 0 , sizeof (* result ));
16
+ ret = gmtime_r (timep , result );
17
+
18
+ /*
19
+ * Rather than NULL, FreeBSD gmtime simply leaves the "struct tm"
20
+ * untouched when it encounters overflow. Since "mday" cannot otherwise
21
+ * be zero, we can test this very quickly.
22
+ */
23
+ if (ret && !ret -> tm_mday ) {
24
+ ret = NULL ;
25
+ errno = EOVERFLOW ;
26
+ }
27
+
28
+ return ret ;
29
+ }
Original file line number Diff line number Diff line change @@ -187,6 +187,7 @@ ifeq ($(uname_S),FreeBSD)
187
187
endif
188
188
PYTHON_PATH = /usr/local/bin/python
189
189
HAVE_PATHS_H = YesPlease
190
+ GMTIME_UNRELIABLE_ERRORS = UnfortunatelyYes
190
191
endif
191
192
ifeq ($(uname_S),OpenBSD)
192
193
NO_STRCASESTR = YesPlease
Original file line number Diff line number Diff line change @@ -716,4 +716,11 @@ void warn_on_inaccessible(const char *path);
716
716
/* Get the passwd entry for the UID of the current process. */
717
717
struct passwd * xgetpwuid_self (void );
718
718
719
+ #ifdef GMTIME_UNRELIABLE_ERRORS
720
+ struct tm * git_gmtime (const time_t * );
721
+ struct tm * git_gmtime_r (const time_t * , struct tm * );
722
+ #define gmtime git_gmtime
723
+ #define gmtime_r git_gmtime_r
724
+ #endif
725
+
719
726
#endif
Original file line number Diff line number Diff line change @@ -82,11 +82,9 @@ test_expect_success 'date parser recognizes time_t overflow' '
82
82
'
83
83
84
84
# date is within 2^63-1, but enough to choke glibc's gmtime
85
- test_expect_success ' absurdly far-in-future dates produce sentinel ' '
85
+ test_expect_success ' absurdly far-in-future date ' '
86
86
commit=$(munge_author_date HEAD 999999999999999999) &&
87
- echo "Thu Jan 1 00:00:00 1970 +0000" >expect &&
88
- git log -1 --format=%ad $commit >actual &&
89
- test_cmp expect actual
87
+ git log -1 --format=%ad $commit
90
88
'
91
89
92
90
test_done
You can’t perform that action at this time.
0 commit comments