[PATCH] fix git-checkout-cache segfault on parisc
The index cleanup code is executed via atexit() which is *after* main has completed, so the stack allocated cache_file has gone out of scope. Parisc seems to use stack in the destructor functions, so cache_file gets partially overwritten leading to the predictable disastrous consequences. [jc: Just to make sure, I audited other users of the function hold_index_file_for_update() to make sure they do not have this problem; everybody else uses non-stack cache_file structure and is fine. Thanks, James.] Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com> Signed-off-by: Junio C Hamano <junkio@cox.net>maint
							parent
							
								
									3c3852e33b
								
							
						
					
					
						commit
						31f584c242
					
				|  | @ -78,10 +78,11 @@ static int checkout_all(void) | ||||||
| static const char checkout_cache_usage[] = | static const char checkout_cache_usage[] = | ||||||
| "git-checkout-cache [-u] [-q] [-a] [-f] [-n] [--prefix=<string>] [--] <file>..."; | "git-checkout-cache [-u] [-q] [-a] [-f] [-n] [--prefix=<string>] [--] <file>..."; | ||||||
|  |  | ||||||
|  | static struct cache_file cache_file; | ||||||
|  |  | ||||||
| int main(int argc, char **argv) | int main(int argc, char **argv) | ||||||
| { | { | ||||||
| 	int i, force_filename = 0; | 	int i, force_filename = 0; | ||||||
| 	struct cache_file cache_file; |  | ||||||
| 	int newfd = -1; | 	int newfd = -1; | ||||||
|  |  | ||||||
| 	if (read_cache() < 0) { | 	if (read_cache() < 0) { | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 James Bottomley
						James Bottomley