10static inline bool Is8859Character(
char c) {
11 const unsigned char cc =
static_cast<unsigned char>(c);
12 return (cc >= 32 && cc <= 126) || (cc >= 160);
21 m_filename.assign(
reinterpret_cast<const char*
>(v.
begin()), v.
size());
23 m_comment.assign(
reinterpret_cast<const char*
>(v.
begin()), v.
size());
27void Gzip::WritePrestreamHeader()
33 if(!m_filename.empty())
35 if(!m_comment.empty())
49 if(!m_filename.empty())
53 if(!m_comment.empty())
57void Gzip::ProcessUncompressedData(
const byte *inString,
size_t length)
59 m_crc.
Update(inString, length);
60 m_totalLen += (
word32)length;
63void Gzip::WritePoststreamTail()
77 if(throwOnEncodingError)
79 for(
size_t i = 0; i < comment.length(); i++) {
80 const char c = comment[i];
81 if(!Is8859Character(c))
91 if(throwOnEncodingError)
93 for(
size_t i = 0; i < filename.length(); i++) {
94 const char c = filename[i];
95 if(!Is8859Character(c))
100 m_filename = filename;
106 :
Inflator(attachment, repeat, propagation), m_length(0), m_filetime(0)
110void Gunzip::ProcessPrestreamHeader()
122 if (m_inQueue.Get(buf, 2)!=2)
throw HeaderErr();
123 if (buf[0] != MAGIC1 || buf[1] != MAGIC2)
throw HeaderErr();
124 if (!m_inQueue.Get(b) || (b != DEFLATED))
throw HeaderErr();
125 if (!m_inQueue.Get(flags))
throw HeaderErr();
126 if (flags & (ENCRYPTED | CONTINUED))
throw HeaderErr();
128 if (m_inQueue.Skip(2)!=2)
throw HeaderErr();
130 if (flags & EXTRA_FIELDS)
134 if (m_inQueue.Skip(length)!=length)
throw HeaderErr();
137 if (flags & FILENAME)
141 if(!m_inQueue.Get(b))
throw HeaderErr();
142 if(b) m_filename.append( 1, (
char)b );
147 if (flags & COMMENTS)
151 if(!m_inQueue.Get(b))
throw HeaderErr();
152 if(b) m_comment.append( 1, (
char)b );
158void Gunzip::ProcessDecompressedData(
const byte *inString,
size_t length)
161 m_crc.
Update(inString, length);
162 m_length += (
word32)length;
165void Gunzip::ProcessPoststreamTail()
168 if (m_inQueue.Get(crc, 4) != 4)
176 if (lengthCheck != m_length)
182 if(throwOnEncodingError)
184 for(
size_t i = 0; i < m_comment.length(); i++) {
185 const char c = m_comment[i];
186 if(!Is8859Character(c))
196 if(throwOnEncodingError)
198 for(
size_t i = 0; i < m_filename.length(); i++) {
199 const char c = m_filename[i];
200 if(!Is8859Character(c))
Standard names for retrieving values by name when working with NameValuePairs.
void Update(const byte *input, size_t length)
Updates a hash with additional input.
Used to pass byte array input as part of a NameValuePairs object.
const byte * begin() const
Pointer to the first byte in the memory block.
size_t size() const
Length of the memory block.
void IsolatedInitialize(const NameValuePairs ¶meters)
Initialize or reinitialize this object, without signal propagation.
int GetDeflateLevel() const
Retrieves the deflation level.
BufferedTransformation * AttachedTransformation()
Retrieve attached transformation.
Gunzip(BufferedTransformation *attachment=NULL, bool repeat=false, int autoSignalPropagation=-1)
Construct a Gunzip decompressor.
const std::string & GetComment(bool throwOnEncodingError=false) const
const std::string & GetFilename(bool throwOnEncodingError=false) const
void SetComment(const std::string &comment, bool throwOnEncodingError=false)
void IsolatedInitialize(const NameValuePairs ¶meters)
Initialize or reinitialize this object, without signal propagation.
void SetFilename(const std::string &filename, bool throwOnEncodingError=false)
DEFLATE decompressor (RFC 1951)
Interface for retrieving values given their names.
bool GetValue(const char *name, T &value) const
Get a named value.
CRYPTOPP_DLL int GetIntValueWithDefault(const char *name, int defaultValue) const
Get a named value with type int, with default.
unsigned int word32
32-bit unsigned datatype
unsigned short word16
16-bit unsigned datatype
@ LITTLE_ENDIAN_ORDER
byte order is little-endian
GZIP compression and decompression (RFC 1952)
Crypto++ library namespace.
const char * FileName()
const char *
const char * Comment()
const char *
const char * FileTime()
int