xdiff: use xmalloc/xrealloc
Most of xdiff uses a bare malloc() to allocate memory, and returns an error when we get NULL. However, there are a few spots which don't check the return value and may segfault, including at least xdl_merge() and xpatience.c's find_longest_common_sequence(). Let's use xmalloc() everywhere instead, so that we get a graceful die() for these cases, without having to do further auditing. This does mean the existing cases which check errors will now die() instead of returning an error up the stack. But: - that's how the rest of Git behaves already for malloc errors - all of the callers of xdi_diff(), etc, die upon seeing an error So while we might one day want to fully lib-ify the diff code and make it possible to use as part of a long-running process, we're not close to that now. And because we're just tweaking the xdl_malloc() macro here, we're not really moving ourselves any further away from that. We could, for example, simplify some of the functions which handle malloc() errors which can no longer occur. But that would probably be taking us in the wrong direction. This also makes our malloc handling more consistent with the rest of Git, including enforcing GIT_ALLOC_LIMIT and trying to reclaim pack memory when needed. Reported-by: 王健强 <jianqiang.wang@securitygossip.com> Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
		
				
					committed by
					
						
						Junio C Hamano
					
				
			
			
				
	
			
			
			
						parent
						
							b46054b374
						
					
				
				
					commit
					36c8319724
				
			@ -113,9 +113,9 @@ typedef struct s_bdiffparam {
 | 
			
		||||
} bdiffparam_t;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define xdl_malloc(x) malloc(x)
 | 
			
		||||
#define xdl_malloc(x) xmalloc(x)
 | 
			
		||||
#define xdl_free(ptr) free(ptr)
 | 
			
		||||
#define xdl_realloc(ptr,x) realloc(ptr,x)
 | 
			
		||||
#define xdl_realloc(ptr,x) xrealloc(ptr,x)
 | 
			
		||||
 | 
			
		||||
void *xdl_mmfile_first(mmfile_t *mmf, long *size);
 | 
			
		||||
long xdl_mmfile_size(mmfile_t *mmf);
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user