50 lines
		
	
	
		
			947 B
		
	
	
	
		
			C
		
	
	
			
		
		
	
	
			50 lines
		
	
	
		
			947 B
		
	
	
	
		
			C
		
	
	
| #include "git-compat-util.h"
 | |
| #include "date.h"
 | |
| 
 | |
| int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size);
 | |
| 
 | |
| int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
 | |
| {
 | |
| 	int local;
 | |
| 	int num;
 | |
| 	char *str;
 | |
| 	int16_t tz;
 | |
| 	timestamp_t ts;
 | |
| 	enum date_mode_type dmtype;
 | |
| 	struct date_mode dm;
 | |
| 
 | |
| 	if (size <= 4)
 | |
| 		/*
 | |
| 		 * we use the first byte to fuzz dmtype and the
 | |
| 		 * second byte to fuzz local, then the next two
 | |
| 		 * bytes to fuzz tz offset. The remainder
 | |
| 		 * (at least one byte) is fed as input to
 | |
| 		 * approxidate_careful().
 | |
| 		 */
 | |
| 		return 0;
 | |
| 
 | |
| 	local = !!(*data++ & 0x10);
 | |
| 	num = *data++ % DATE_UNIX;
 | |
| 	if (num >= DATE_STRFTIME)
 | |
| 		num++;
 | |
| 	dmtype = (enum date_mode_type)num;
 | |
| 	size -= 2;
 | |
| 
 | |
| 	tz = *data++;
 | |
| 	tz = (tz << 8) | *data++;
 | |
| 	size -= 2;
 | |
| 
 | |
| 	str = xmemdupz(data, size);
 | |
| 
 | |
| 	ts = approxidate_careful(str, &num);
 | |
| 	free(str);
 | |
| 
 | |
| 	dm = date_mode_from_type(dmtype);
 | |
| 	dm.local = local;
 | |
| 	show_date(ts, (int)tz, dm);
 | |
| 
 | |
| 	date_mode_release(&dm);
 | |
| 
 | |
| 	return 0;
 | |
| }
 |