|
34 | 34 | #include "file.h"
|
35 | 35 |
|
36 | 36 | #ifndef lint
|
37 |
| -FILE_RCSID("@(#)$File: apprentice.c,v 1.255 2016/10/24 18:02:17 christos Exp $") |
| 37 | +FILE_RCSID("@(#)$File: apprentice.c,v 1.260 2017/04/28 16:27:58 christos Exp $") |
38 | 38 | #endif /* lint */
|
39 | 39 |
|
40 | 40 | #include "magic.h"
|
@@ -2235,7 +2235,7 @@ parse_ext(struct magic_set *ms, struct magic_entry *me, const char *line)
|
2235 | 2235 |
|
2236 | 2236 | return parse_extra(ms, me, line,
|
2237 | 2237 | CAST(off_t, offsetof(struct magic, ext)),
|
2238 |
| - sizeof(m->ext), "EXTENSION", ",!+-/", 0); |
| 2238 | + sizeof(m->ext), "EXTENSION", ",!+-/@", 0); |
2239 | 2239 | }
|
2240 | 2240 |
|
2241 | 2241 | /*
|
@@ -2296,6 +2296,8 @@ check_format_type(const char *ptr, int type, const char **estr)
|
2296 | 2296 | ptr++;
|
2297 | 2297 | if (*ptr == '.')
|
2298 | 2298 | ptr++;
|
| 2299 | + if (*ptr == '#') |
| 2300 | + ptr++; |
2299 | 2301 | #define CHECKLEN() do { \
|
2300 | 2302 | for (len = cnt = 0; isdigit((unsigned char)*ptr); ptr++, cnt++) \
|
2301 | 2303 | len = len * 10 + (*ptr - '0'); \
|
@@ -3289,22 +3291,35 @@ file_pstring_get_length(const struct magic *m, const char *ss)
|
3289 | 3291 | {
|
3290 | 3292 | size_t len = 0;
|
3291 | 3293 | const unsigned char *s = (const unsigned char *)ss;
|
| 3294 | + unsigned int s3, s2, s1, s0; |
3292 | 3295 |
|
3293 | 3296 | switch (m->str_flags & PSTRING_LEN) {
|
3294 | 3297 | case PSTRING_1_LE:
|
3295 | 3298 | len = *s;
|
3296 | 3299 | break;
|
3297 | 3300 | case PSTRING_2_LE:
|
3298 |
| - len = (s[1] << 8) | s[0]; |
| 3301 | + s0 = s[0]; |
| 3302 | + s1 = s[1]; |
| 3303 | + len = (s1 << 8) | s0; |
3299 | 3304 | break;
|
3300 | 3305 | case PSTRING_2_BE:
|
3301 |
| - len = (s[0] << 8) | s[1]; |
| 3306 | + s0 = s[0]; |
| 3307 | + s1 = s[1]; |
| 3308 | + len = (s0 << 8) | s1; |
3302 | 3309 | break;
|
3303 | 3310 | case PSTRING_4_LE:
|
3304 |
| - len = (s[3] << 24) | (s[2] << 16) | (s[1] << 8) | s[0]; |
| 3311 | + s0 = s[0]; |
| 3312 | + s1 = s[1]; |
| 3313 | + s2 = s[2]; |
| 3314 | + s3 = s[3]; |
| 3315 | + len = (s3 << 24) | (s2 << 16) | (s1 << 8) | s0; |
3305 | 3316 | break;
|
3306 | 3317 | case PSTRING_4_BE:
|
3307 |
| - len = (s[0] << 24) | (s[1] << 16) | (s[2] << 8) | s[3]; |
| 3318 | + s0 = s[0]; |
| 3319 | + s1 = s[1]; |
| 3320 | + s2 = s[2]; |
| 3321 | + s3 = s[3]; |
| 3322 | + len = (s0 << 24) | (s1 << 16) | (s2 << 8) | s3; |
3308 | 3323 | break;
|
3309 | 3324 | default:
|
3310 | 3325 | abort(); /* Impossible */
|
|
0 commit comments