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 len1 = flags1 & CE_NAMEMASK; | ||||
| 	int len2 = flags2 & CE_NAMEMASK; | ||||
| 	int len = len1 < len2 ? len1 : len2; | ||||
| 	int cmp; | ||||
| 	int len1, len2, len, cmp; | ||||
|  | ||||
| 	len1 = flags1 & CE_NAMEMASK; | ||||
| 	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); | ||||
| 	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