mirror of
				https://github.com/fmtlib/fmt.git
				synced 2025-10-31 22:21:41 +01:00 
			
		
		
		
	
		
			
	
	
		
			33 lines
		
	
	
		
			828 B
		
	
	
	
		
			C++
		
	
	
	
	
	
		
		
			
		
	
	
			33 lines
		
	
	
		
			828 B
		
	
	
	
		
			C++
		
	
	
	
	
	
|   | // Copyright (c) 2021, Paul Dreik
 | ||
|  | // For license information refer to format.h.
 | ||
|  | #include <fmt/chrono.h>
 | ||
|  | 
 | ||
|  | #include "fuzzer-common.h"
 | ||
|  | 
 | ||
|  | /*
 | ||
|  |  * a fuzzer for the chrono timepoints formatters | ||
|  |  * C is a clock (std::chrono::system_clock etc) | ||
|  |  */ | ||
|  | template <typename C> void doit(const uint8_t* data, size_t size) { | ||
|  |   using Rep = typename C::time_point::rep; | ||
|  |   constexpr auto N = sizeof(Rep); | ||
|  |   if (size < N) return; | ||
|  | 
 | ||
|  |   const auto x = assign_from_buf<Rep>(data); | ||
|  |   typename C::duration dur{x}; | ||
|  |   typename C::time_point timepoint{dur}; | ||
|  |   data += N; | ||
|  |   size -= N; | ||
|  |   data_to_string format_str(data, size); | ||
|  | 
 | ||
|  |   std::string message = fmt::format(format_str.get(), timepoint); | ||
|  | } | ||
|  | 
 | ||
|  | extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { | ||
|  |   try { | ||
|  |     doit<std::chrono::system_clock>(data, size); | ||
|  |   } catch (...) { | ||
|  |   } | ||
|  |   return 0; | ||
|  | } |