Merge branch 'tg/maint-cache-name-compare' into tg/ce-namelen-field
* tg/maint-cache-name-compare: cache_name_compare(): do not truncate while comparing pathsmaint
						commit
						01388518c3
					
				
							
								
								
									
										13
									
								
								read-cache.c
								
								
								
								
							
							
						
						
									
										13
									
								
								read-cache.c
								
								
								
								
							|  | @ -397,10 +397,15 @@ int df_name_compare(const char *name1, int len1, int mode1, | ||||||
|  |  | ||||||
| int cache_name_compare(const char *name1, int flags1, const char *name2, int flags2) | int cache_name_compare(const char *name1, int flags1, const char *name2, int flags2) | ||||||
| { | { | ||||||
| 	int len1 = flags1 & CE_NAMEMASK; | 	int len1, len2, len, cmp; | ||||||
| 	int len2 = flags2 & CE_NAMEMASK; |  | ||||||
| 	int len = len1 < len2 ? len1 : len2; | 	len1 = flags1 & CE_NAMEMASK; | ||||||
| 	int cmp; | 	if (CE_NAMEMASK <= len1) | ||||||
|  | 		len1 = strlen(name1 + CE_NAMEMASK) + CE_NAMEMASK; | ||||||
|  | 	len2 = flags2 & CE_NAMEMASK; | ||||||
|  | 	if (CE_NAMEMASK <= len2) | ||||||
|  | 		len2 = strlen(name2 + CE_NAMEMASK) + CE_NAMEMASK; | ||||||
|  | 	len = len1 < len2 ? len1 : len2; | ||||||
|  |  | ||||||
| 	cmp = memcmp(name1, name2, len); | 	cmp = memcmp(name1, name2, len); | ||||||
| 	if (cmp) | 	if (cmp) | ||||||
|  |  | ||||||
|  | @ -0,0 +1,39 @@ | ||||||
|  | #!/bin/sh | ||||||
|  |  | ||||||
|  | test_description='overly long paths' | ||||||
|  | . ./test-lib.sh | ||||||
|  |  | ||||||
|  | test_expect_success setup ' | ||||||
|  | 	p=filefilefilefilefilefilefilefile && | ||||||
|  | 	p=$p$p$p$p$p$p$p$p$p$p$p$p$p$p$p$p && | ||||||
|  | 	p=$p$p$p$p$p$p$p$p$p$p$p$p$p$p$p$p && | ||||||
|  |  | ||||||
|  | 	path_a=${p}_a && | ||||||
|  | 	path_z=${p}_z && | ||||||
|  |  | ||||||
|  | 	blob_a=$(echo frotz | git hash-object -w --stdin) && | ||||||
|  | 	blob_z=$(echo nitfol | git hash-object -w --stdin) && | ||||||
|  |  | ||||||
|  | 	pat="100644 %s 0\t%s\n" | ||||||
|  | ' | ||||||
|  |  | ||||||
|  | test_expect_success 'overly-long path by itself is not a problem' ' | ||||||
|  | 	printf "$pat" "$blob_a" "$path_a" | | ||||||
|  | 	git update-index --add --index-info && | ||||||
|  | 	echo "$path_a" >expect && | ||||||
|  | 	git ls-files >actual && | ||||||
|  | 	test_cmp expect actual | ||||||
|  | ' | ||||||
|  |  | ||||||
|  | test_expect_success 'overly-long path does not replace another by mistake' ' | ||||||
|  | 	printf "$pat" "$blob_a" "$path_a" "$blob_z" "$path_z" | | ||||||
|  | 	git update-index --add --index-info && | ||||||
|  | 	( | ||||||
|  | 		echo "$path_a" | ||||||
|  | 		echo "$path_z" | ||||||
|  | 	) >expect && | ||||||
|  | 	git ls-files >actual && | ||||||
|  | 	test_cmp expect actual | ||||||
|  | ' | ||||||
|  |  | ||||||
|  | test_done | ||||||
		Loading…
	
		Reference in New Issue
	
	 Junio C Hamano
						Junio C Hamano