mirror of
				https://git.proxmox.com/git/libgit2
				synced 2025-10-31 01:23:30 +00:00 
			
		
		
		
	 e54cfb9b54
			
		
	
	
		e54cfb9b54
		
	
	
	
	
		
			
			By the time we recognise this as an ambiguous id, the object's data has been loaded into memory. Free it when returning EABMIGUOUS.
		
			
				
	
	
		
			94 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			94 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #include "clar_libgit2.h"
 | |
| #include "odb.h"
 | |
| 
 | |
| static git_odb *_odb;
 | |
| 
 | |
| void test_odb_mixed__initialize(void)
 | |
| {
 | |
| 	cl_git_pass(git_odb_open(&_odb, cl_fixture("duplicate.git/objects")));
 | |
| }
 | |
| 
 | |
| void test_odb_mixed__cleanup(void)
 | |
| {
 | |
| 	git_odb_free(_odb);
 | |
| 	_odb = NULL;
 | |
| }
 | |
| 
 | |
| void test_odb_mixed__dup_oid(void) {
 | |
| 	const char hex[] = "ce013625030ba8dba906f756967f9e9ca394464a";
 | |
| 	const char short_hex[] = "ce01362";
 | |
| 	git_oid oid;
 | |
| 	git_odb_object *obj;
 | |
| 
 | |
| 	cl_git_pass(git_oid_fromstr(&oid, hex));
 | |
| 	cl_git_pass(git_odb_read_prefix(&obj, _odb, &oid, GIT_OID_HEXSZ));
 | |
| 	git_odb_object_free(obj);
 | |
| 	cl_git_pass(git_oid_fromstrn(&oid, short_hex, sizeof(short_hex) - 1));
 | |
| 	cl_git_pass(git_odb_read_prefix(&obj, _odb, &oid, sizeof(short_hex) - 1));
 | |
| 	git_odb_object_free(obj);
 | |
| }
 | |
| 
 | |
| /* some known sha collisions of file content:
 | |
|  *   'aabqhq' and 'aaazvc' with prefix 'dea509d0' (+ '9' and + 'b')
 | |
|  *   'aaeufo' and 'aaaohs' with prefix '81b5bff5' (+ 'f' and + 'b')
 | |
|  *   'aafewy' and 'aaepta' with prefix '739e3c4c'
 | |
|  *   'aahsyn' and 'aadrjg' with prefix '0ddeaded' (+ '9' and + 'e')
 | |
|  */
 | |
| 
 | |
| void test_odb_mixed__dup_oid_prefix_0(void) {
 | |
| 	char hex[10];
 | |
| 	git_oid oid;
 | |
| 	git_odb_object *obj;
 | |
| 
 | |
| 	/* ambiguous in the same pack file */
 | |
| 
 | |
| 	strncpy(hex, "dea509d0", sizeof(hex));
 | |
| 	cl_git_pass(git_oid_fromstrn(&oid, hex, strlen(hex)));
 | |
| 	cl_assert_equal_i(
 | |
| 		GIT_EAMBIGUOUS, git_odb_read_prefix(&obj, _odb, &oid, strlen(hex)));
 | |
| 
 | |
| 	strncpy(hex, "dea509d09", sizeof(hex));
 | |
| 	cl_git_pass(git_oid_fromstrn(&oid, hex, strlen(hex)));
 | |
| 	cl_git_pass(git_odb_read_prefix(&obj, _odb, &oid, strlen(hex)));
 | |
| 	git_odb_object_free(obj);
 | |
| 
 | |
| 	strncpy(hex, "dea509d0b", sizeof(hex));
 | |
| 	cl_git_pass(git_oid_fromstrn(&oid, hex, strlen(hex)));
 | |
| 	cl_git_pass(git_odb_read_prefix(&obj, _odb, &oid, strlen(hex)));
 | |
| 	git_odb_object_free(obj);
 | |
| 
 | |
| 	/* ambiguous in different pack files */
 | |
| 
 | |
| 	strncpy(hex, "81b5bff5", sizeof(hex));
 | |
| 	cl_git_pass(git_oid_fromstrn(&oid, hex, strlen(hex)));
 | |
| 	cl_assert_equal_i(
 | |
| 		GIT_EAMBIGUOUS, git_odb_read_prefix(&obj, _odb, &oid, strlen(hex)));
 | |
| 
 | |
| 	strncpy(hex, "81b5bff5b", sizeof(hex));
 | |
| 	cl_git_pass(git_oid_fromstrn(&oid, hex, strlen(hex)));
 | |
| 	cl_git_pass(git_odb_read_prefix(&obj, _odb, &oid, strlen(hex)));
 | |
| 	git_odb_object_free(obj);
 | |
| 
 | |
| 	strncpy(hex, "81b5bff5f", sizeof(hex));
 | |
| 	cl_git_pass(git_oid_fromstrn(&oid, hex, strlen(hex)));
 | |
| 	cl_git_pass(git_odb_read_prefix(&obj, _odb, &oid, strlen(hex)));
 | |
| 	git_odb_object_free(obj);
 | |
| 
 | |
| 	/* ambiguous in pack file and loose */
 | |
| 
 | |
| 	strncpy(hex, "0ddeaded", sizeof(hex));
 | |
| 	cl_git_pass(git_oid_fromstrn(&oid, hex, strlen(hex)));
 | |
| 	cl_assert_equal_i(
 | |
| 		GIT_EAMBIGUOUS, git_odb_read_prefix(&obj, _odb, &oid, strlen(hex)));
 | |
| 
 | |
| 	strncpy(hex, "0ddeaded9", sizeof(hex));
 | |
| 	cl_git_pass(git_oid_fromstrn(&oid, hex, strlen(hex)));
 | |
| 	cl_git_pass(git_odb_read_prefix(&obj, _odb, &oid, strlen(hex)));
 | |
| 	git_odb_object_free(obj);
 | |
| 
 | |
| 	strncpy(hex, "0ddeadede", sizeof(hex));
 | |
| 	cl_git_pass(git_oid_fromstrn(&oid, hex, strlen(hex)));
 | |
| 	cl_git_pass(git_odb_read_prefix(&obj, _odb, &oid, strlen(hex)));
 | |
| 	git_odb_object_free(obj);
 | |
| }
 |