progress: don't dereference before checking for NULL
In `stop_progress()`, we're careful to check that `p_progress` is non-NULL before we dereference it, but by then we have already dereferenced it when calling `finish_if_sparse(*p_progress)`. And, for what it's worth, we'll go on to blindly dereference it again inside `stop_progress_msg()`. We could return early if we get a NULL-pointer, but let's go one step further and BUG instead. The progress API handles NULL just fine, but that's the NULL-ness of `*p_progress`, e.g., when running with `--no-progress`. If `p_progress` is NULL, chances are that's a mistake. For symmetry, let's do the same check in `stop_progress_msg()`, too. Signed-off-by: Martin Ågren <martin.agren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
							parent
							
								
									98a1364740
								
							
						
					
					
						commit
						ac900fddb7
					
				
							
								
								
									
										12
									
								
								progress.c
								
								
								
								
							
							
						
						
									
										12
									
								
								progress.c
								
								
								
								
							|  | @ -319,9 +319,12 @@ static void finish_if_sparse(struct progress *progress) | |||
|  | ||||
| void stop_progress(struct progress **p_progress) | ||||
| { | ||||
| 	if (!p_progress) | ||||
| 		BUG("don't provide NULL to stop_progress"); | ||||
|  | ||||
| 	finish_if_sparse(*p_progress); | ||||
|  | ||||
| 	if (p_progress && *p_progress) { | ||||
| 	if (*p_progress) { | ||||
| 		trace2_data_intmax("progress", the_repository, "total_objects", | ||||
| 				   (*p_progress)->total); | ||||
|  | ||||
|  | @ -342,7 +345,12 @@ void stop_progress(struct progress **p_progress) | |||
|  | ||||
| void stop_progress_msg(struct progress **p_progress, const char *msg) | ||||
| { | ||||
| 	struct progress *progress = *p_progress; | ||||
| 	struct progress *progress; | ||||
|  | ||||
| 	if (!p_progress) | ||||
| 		BUG("don't provide NULL to stop_progress_msg"); | ||||
|  | ||||
| 	progress = *p_progress; | ||||
| 	if (!progress) | ||||
| 		return; | ||||
| 	*p_progress = NULL; | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Martin Ågren
						Martin Ågren