You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
2.7 KiB
85 lines
2.7 KiB
diff --git a/magic/Magdir/filesystems b/magic/Magdir/filesystems |
|
index a2c2966..ecfa6c2 100644 |
|
--- a/magic/Magdir/filesystems |
|
+++ b/magic/Magdir/filesystems |
|
@@ -1251,7 +1251,7 @@ |
|
>>38917 byte >0x33 (unknown version, ID 0x%X) |
|
>>38917 byte <0x31 (unknown version, ID 0x%X) |
|
# "application id" which appears to be used as a volume label |
|
->32808 string >\0 '%s' |
|
+>32808 string/T >\0 '%s' |
|
>34816 string \000CD001\001EL\ TORITO\ SPECIFICATION (bootable) |
|
37633 string CD001 ISO 9660 CD-ROM filesystem data (raw 2352 byte sectors) |
|
!:mime application/x-iso9660-image |
|
diff --git a/src/apprentice.c b/src/apprentice.c |
|
index 0490642..6dd8381 100644 |
|
--- a/src/apprentice.c |
|
+++ b/src/apprentice.c |
|
@@ -1452,6 +1452,9 @@ parse(struct magic_set *ms, struct magic_entry **mentryp, uint32_t *nmentryp, |
|
goto bad; |
|
m->str_flags |= PSTRING_LENGTH_INCLUDES_ITSELF; |
|
break; |
|
+ case CHAR_TRIM: |
|
+ m->str_flags |= STRING_TRIM; |
|
+ break; |
|
default: |
|
bad: |
|
if (ms->flags & MAGIC_CHECK) |
|
diff --git a/src/file.h b/src/file.h |
|
index e02009f..1b5f53f 100644 |
|
--- a/src/file.h |
|
+++ b/src/file.h |
|
@@ -307,6 +307,7 @@ struct magic { |
|
#define PSTRING_LEN \ |
|
(PSTRING_1_BE|PSTRING_2_LE|PSTRING_2_BE|PSTRING_4_LE|PSTRING_4_BE) |
|
#define PSTRING_LENGTH_INCLUDES_ITSELF BIT(12) |
|
+#define STRING_TRIM BIT(13) |
|
#define CHAR_COMPACT_WHITESPACE 'W' |
|
#define CHAR_COMPACT_OPTIONAL_WHITESPACE 'w' |
|
#define CHAR_IGNORE_LOWERCASE 'c' |
|
@@ -321,6 +322,7 @@ struct magic { |
|
#define CHAR_PSTRING_4_BE 'L' |
|
#define CHAR_PSTRING_4_LE 'l' |
|
#define CHAR_PSTRING_LENGTH_INCLUDES_ITSELF 'J' |
|
+#define CHAR_TRIM 'T' |
|
#define STRING_IGNORE_CASE (STRING_IGNORE_LOWERCASE|STRING_IGNORE_UPPERCASE) |
|
#define STRING_DEFAULT_RANGE 100 |
|
|
|
diff --git a/src/softmagic.c b/src/softmagic.c |
|
index 8d08cad..f084edd 100644 |
|
--- a/src/softmagic.c |
|
+++ b/src/softmagic.c |
|
@@ -451,11 +451,30 @@ mprint(struct magic_set *ms, struct magic *m) |
|
t = ms->offset + m->vallen; |
|
} |
|
else { |
|
+ char *str = p->s; |
|
+ |
|
+ /* compute t before we mangle the string? */ |
|
+ t = ms->offset + strlen(str); |
|
+ |
|
if (*m->value.s == '\0') |
|
- p->s[strcspn(p->s, "\n")] = '\0'; |
|
- if (file_printf(ms, m->desc, p->s) == -1) |
|
+ str[strcspn(str, "\n")] = '\0'; |
|
+ |
|
+ if (m->str_flags & STRING_TRIM) { |
|
+ char *last; |
|
+ while (isspace((unsigned char)*str)) |
|
+ str++; |
|
+ last = str; |
|
+ while (*last) |
|
+ last++; |
|
+ --last; |
|
+ while (isspace((unsigned char)*last)) |
|
+ last--; |
|
+ *++last = '\0'; |
|
+ } |
|
+ |
|
+ if (file_printf(ms, m->desc, str) == -1) |
|
return -1; |
|
- t = ms->offset + strlen(p->s); |
|
+ |
|
if (m->type == FILE_PSTRING) |
|
t += file_pstring_length_size(m); |
|
}
|
|
|