Link Here
|
60 |
return result; |
60 |
return result; |
61 |
} |
61 |
} |
62 |
|
62 |
|
63 |
static int getIntAt(const char * pos) { |
63 |
static int getIntAt(const void * pos) { |
64 |
char p[4]; |
64 |
char p[4]; |
65 |
|
65 |
|
66 |
memcpy(p, pos, 4); /* ensure alignment! */ |
66 |
memcpy(p, pos, 4); /* ensure alignment! */ |
Link Here
|
86 |
{ NULL, EXTRACTOR_UNKNOWN}, |
86 |
{ NULL, EXTRACTOR_UNKNOWN}, |
87 |
}; |
87 |
}; |
88 |
|
88 |
|
89 |
static struct EXTRACTOR_Keywords * processtEXt(const unsigned char * data, |
89 |
static struct EXTRACTOR_Keywords * processtEXt(const char * data, |
90 |
unsigned int length, |
90 |
unsigned int length, |
91 |
struct EXTRACTOR_Keywords * prev) { |
91 |
struct EXTRACTOR_Keywords * prev) { |
92 |
char * keyword; |
92 |
char * keyword; |
Link Here
|
114 |
prev); |
114 |
prev); |
115 |
} |
115 |
} |
116 |
|
116 |
|
117 |
static struct EXTRACTOR_Keywords * processiTXt(const unsigned char * data, |
117 |
static struct EXTRACTOR_Keywords * processiTXt(const char * data, |
118 |
unsigned int length, |
118 |
unsigned int length, |
119 |
struct EXTRACTOR_Keywords * prev) { |
119 |
struct EXTRACTOR_Keywords * prev) { |
120 |
unsigned int pos; |
120 |
unsigned int pos; |
Link Here
|
165 |
/* printf("out of memory"); */ |
165 |
/* printf("out of memory"); */ |
166 |
return prev; /* out of memory */ |
166 |
return prev; /* out of memory */ |
167 |
} |
167 |
} |
168 |
ret = uncompress(buf, |
168 |
ret = uncompress((Bytef*) buf, |
169 |
&bufLen, |
169 |
&bufLen, |
170 |
&data[pos], |
170 |
(const Bytef*) &data[pos], |
171 |
length - pos); |
171 |
length - pos); |
172 |
if (ret == Z_OK) { |
172 |
if (ret == Z_OK) { |
173 |
/* printf("zlib ok"); */ |
173 |
/* printf("zlib ok"); */ |
Link Here
|
196 |
prev); |
196 |
prev); |
197 |
} |
197 |
} |
198 |
|
198 |
|
199 |
static struct EXTRACTOR_Keywords * processIHDR(const unsigned char * data, |
199 |
static struct EXTRACTOR_Keywords * processIHDR(const char * data, |
200 |
unsigned int length, |
200 |
unsigned int length, |
201 |
struct EXTRACTOR_Keywords * prev) { |
201 |
struct EXTRACTOR_Keywords * prev) { |
202 |
char * tmp; |
202 |
char * tmp; |
Link Here
|
216 |
} |
216 |
} |
217 |
|
217 |
|
218 |
/* not supported... */ |
218 |
/* not supported... */ |
219 |
static struct EXTRACTOR_Keywords * processzTXt(const unsigned char * data, |
219 |
static struct EXTRACTOR_Keywords * processzTXt(const char * data, |
220 |
unsigned int length, |
220 |
unsigned int length, |
221 |
struct EXTRACTOR_Keywords * prev) { |
221 |
struct EXTRACTOR_Keywords * prev) { |
222 |
char * keyword; |
222 |
char * keyword; |
Link Here
|
248 |
/* printf("out of memory"); */ |
248 |
/* printf("out of memory"); */ |
249 |
return prev; /* out of memory */ |
249 |
return prev; /* out of memory */ |
250 |
} |
250 |
} |
251 |
ret = uncompress(buf, |
251 |
ret = uncompress((Bytef*) buf, |
252 |
&bufLen, |
252 |
&bufLen, |
253 |
&data[off], |
253 |
(const Bytef*) &data[off], |
254 |
length - off); |
254 |
length - off); |
255 |
if (ret == Z_OK) { |
255 |
if (ret == Z_OK) { |
256 |
/* printf("zlib ok"); */ |
256 |
/* printf("zlib ok"); */ |
Link Here
|
283 |
|
283 |
|
284 |
|
284 |
|
285 |
struct EXTRACTOR_Keywords * libextractor_png_extract(char * filename, |
285 |
struct EXTRACTOR_Keywords * libextractor_png_extract(char * filename, |
286 |
const unsigned char * data, |
286 |
const char * data, |
287 |
size_t size, |
287 |
size_t size, |
288 |
struct EXTRACTOR_Keywords * prev) { |
288 |
struct EXTRACTOR_Keywords * prev) { |
289 |
const unsigned char * pos; |
289 |
const char * pos; |
290 |
const unsigned char * end; |
290 |
const char * end; |
291 |
struct EXTRACTOR_Keywords * result; |
291 |
struct EXTRACTOR_Keywords * result; |
292 |
unsigned int length; |
292 |
unsigned int length; |
293 |
|
293 |
|
Link Here
|
307 |
length = htonl(getIntAt(pos)); pos+=4; |
307 |
length = htonl(getIntAt(pos)); pos+=4; |
308 |
/* printf("Length: %u, pos %u\n", length, pos - data); */ |
308 |
/* printf("Length: %u, pos %u\n", length, pos - data); */ |
309 |
if ( (pos+4+length+4 > end) || |
309 |
if ( (pos+4+length+4 > end) || |
310 |
(pos+4+length+4 < pos + 4 + length) ) |
310 |
(pos+4+length+4 < pos + 8) ) |
311 |
break; |
311 |
break; |
312 |
|
312 |
|
313 |
if (0 == strncmp(pos, "IHDR", 4)) |
313 |
if (0 == strncmp(pos, "IHDR", 4)) |