52 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			52 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C++
		
	
	
	
#include <string>
 | 
						|
#include <sstream>
 | 
						|
#include <cmath>
 | 
						|
#include <algorithm>
 | 
						|
#include "gif_fuzz_proto.pb.h"
 | 
						|
 | 
						|
namespace gifProtoFuzzer
 | 
						|
{
 | 
						|
class ProtoConverter
 | 
						|
{
 | 
						|
  public:
 | 
						|
	std::string gifProtoToString(GifProto const &proto);
 | 
						|
 | 
						|
  private:
 | 
						|
	template <class T>
 | 
						|
	void visit(google::protobuf::RepeatedPtrField<T> const &_repeated_field);
 | 
						|
	void visit(const GifProto &);
 | 
						|
	void visit(const Header &);
 | 
						|
	void visit(const LogicalScreenDescriptor &);
 | 
						|
	void visit(const GlobalColorTable &);
 | 
						|
	void visit(const ImageChunk &);
 | 
						|
	void visit(const BasicChunk &);
 | 
						|
	void visit(const ImageData &);
 | 
						|
	void visit(const SubBlock &);
 | 
						|
	void visit(const ImageDescriptor &);
 | 
						|
	void visit(const LocalColorTable &);
 | 
						|
	void visit(const GraphicControlExtension &);
 | 
						|
	void visit(const PlainTextExtension &);
 | 
						|
	void visit(const ApplicationExtension &);
 | 
						|
	void visit(const CommentExtension &);
 | 
						|
	void visit(const Trailer &);
 | 
						|
 | 
						|
	// Utility functions
 | 
						|
	void writeByte(uint8_t x);
 | 
						|
	void writeWord(uint16_t x);
 | 
						|
	void writeInt(uint32_t x);
 | 
						|
	void writeLong(uint64_t x);
 | 
						|
	static uint16_t extractWordFromUInt32(uint32_t a);
 | 
						|
	static uint8_t extractByteFromUInt32(uint32_t a);
 | 
						|
	static uint32_t tableExpToTableSize(uint32_t tableExp);
 | 
						|
 | 
						|
	std::stringstream m_output;
 | 
						|
	bool m_hasGCT = false;
 | 
						|
	bool m_hasLCT = false;
 | 
						|
	uint8_t m_globalColorExp = 0;
 | 
						|
	uint8_t m_localColorExp = 0;
 | 
						|
 | 
						|
	static constexpr unsigned char m_sig[] = {0x47, 0x49, 0x46};
 | 
						|
	static constexpr unsigned char m_ver89a[] = {0x38, 0x39, 0x61};
 | 
						|
	static constexpr unsigned char m_ver87a[] = {0x38, 0x37, 0x61};
 | 
						|
};
 | 
						|
} // namespace gifProtoFuzzer
 |