Merge branch 'jk/commit-dates-parsing-fix' into maint
* jk/commit-dates-parsing-fix: t4212: loosen far-in-future test for AIX date: recognize bogus FreeBSD gmtime outputmaint
						commit
						b8a30194db
					
				
							
								
								
									
										8
									
								
								Makefile
								
								
								
								
							
							
						
						
									
										8
									
								
								Makefile
								
								
								
								
							|  | @ -342,6 +342,9 @@ all:: | ||||||
| # Define DEFAULT_HELP_FORMAT to "man", "info" or "html" | # Define DEFAULT_HELP_FORMAT to "man", "info" or "html" | ||||||
| # (defaults to "man") if you want to have a different default when | # (defaults to "man") if you want to have a different default when | ||||||
| # "git help" is called without a parameter specifying the format. | # "git help" is called without a parameter specifying the format. | ||||||
|  | # | ||||||
|  | # Define GMTIME_UNRELIABLE_ERRORS if your gmtime() function does not | ||||||
|  | # return NULL when it receives a bogus time_t. | ||||||
|  |  | ||||||
| GIT-VERSION-FILE: FORCE | GIT-VERSION-FILE: FORCE | ||||||
| 	@$(SHELL_PATH) ./GIT-VERSION-GEN | 	@$(SHELL_PATH) ./GIT-VERSION-GEN | ||||||
|  | @ -1494,6 +1497,11 @@ ifneq (,$(XDL_FAST_HASH)) | ||||||
| 	BASIC_CFLAGS += -DXDL_FAST_HASH | 	BASIC_CFLAGS += -DXDL_FAST_HASH | ||||||
| endif | endif | ||||||
|  |  | ||||||
|  | ifdef GMTIME_UNRELIABLE_ERRORS | ||||||
|  | 	COMPAT_OBJS += compat/gmtime.o | ||||||
|  | 	BASIC_CFLAGS += -DGMTIME_UNRELIABLE_ERRORS | ||||||
|  | endif | ||||||
|  |  | ||||||
| ifeq ($(TCLTK_PATH),) | ifeq ($(TCLTK_PATH),) | ||||||
| NO_TCLTK = NoThanks | NO_TCLTK = NoThanks | ||||||
| endif | endif | ||||||
|  |  | ||||||
|  | @ -0,0 +1,29 @@ | ||||||
|  | #include "../git-compat-util.h" | ||||||
|  | #undef gmtime | ||||||
|  | #undef gmtime_r | ||||||
|  |  | ||||||
|  | struct tm *git_gmtime(const time_t *timep) | ||||||
|  | { | ||||||
|  | 	static struct tm result; | ||||||
|  | 	return git_gmtime_r(timep, &result); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | struct tm *git_gmtime_r(const time_t *timep, struct tm *result) | ||||||
|  | { | ||||||
|  | 	struct tm *ret; | ||||||
|  |  | ||||||
|  | 	memset(result, 0, sizeof(*result)); | ||||||
|  | 	ret = gmtime_r(timep, result); | ||||||
|  |  | ||||||
|  | 	/* | ||||||
|  | 	 * Rather than NULL, FreeBSD gmtime simply leaves the "struct tm" | ||||||
|  | 	 * untouched when it encounters overflow. Since "mday" cannot otherwise | ||||||
|  | 	 * be zero, we can test this very quickly. | ||||||
|  | 	 */ | ||||||
|  | 	if (ret && !ret->tm_mday) { | ||||||
|  | 		ret = NULL; | ||||||
|  | 		errno = EOVERFLOW; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	return ret; | ||||||
|  | } | ||||||
|  | @ -188,6 +188,7 @@ ifeq ($(uname_S),FreeBSD) | ||||||
| 	endif | 	endif | ||||||
| 	PYTHON_PATH = /usr/local/bin/python | 	PYTHON_PATH = /usr/local/bin/python | ||||||
| 	HAVE_PATHS_H = YesPlease | 	HAVE_PATHS_H = YesPlease | ||||||
|  | 	GMTIME_UNRELIABLE_ERRORS = UnfortunatelyYes | ||||||
| endif | endif | ||||||
| ifeq ($(uname_S),OpenBSD) | ifeq ($(uname_S),OpenBSD) | ||||||
| 	NO_STRCASESTR = YesPlease | 	NO_STRCASESTR = YesPlease | ||||||
|  |  | ||||||
|  | @ -721,4 +721,11 @@ void warn_on_inaccessible(const char *path); | ||||||
| /* Get the passwd entry for the UID of the current process. */ | /* Get the passwd entry for the UID of the current process. */ | ||||||
| struct passwd *xgetpwuid_self(void); | struct passwd *xgetpwuid_self(void); | ||||||
|  |  | ||||||
|  | #ifdef GMTIME_UNRELIABLE_ERRORS | ||||||
|  | struct tm *git_gmtime(const time_t *); | ||||||
|  | struct tm *git_gmtime_r(const time_t *, struct tm *); | ||||||
|  | #define gmtime git_gmtime | ||||||
|  | #define gmtime_r git_gmtime_r | ||||||
|  | #endif | ||||||
|  |  | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | @ -82,11 +82,9 @@ test_expect_success 'date parser recognizes time_t overflow' ' | ||||||
| ' | ' | ||||||
|  |  | ||||||
| # date is within 2^63-1, but enough to choke glibc's gmtime | # date is within 2^63-1, but enough to choke glibc's gmtime | ||||||
| test_expect_success 'absurdly far-in-future dates produce sentinel' ' | test_expect_success 'absurdly far-in-future date' ' | ||||||
| 	commit=$(munge_author_date HEAD 999999999999999999) && | 	commit=$(munge_author_date HEAD 999999999999999999) && | ||||||
| 	echo "Thu Jan 1 00:00:00 1970 +0000" >expect && | 	git log -1 --format=%ad $commit | ||||||
| 	git log -1 --format=%ad $commit >actual && |  | ||||||
| 	test_cmp expect actual |  | ||||||
| ' | ' | ||||||
|  |  | ||||||
| test_done | test_done | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 Junio C Hamano
						Junio C Hamano