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.
86 lines
2.7 KiB
86 lines
2.7 KiB
6 years ago
|
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);
|
||
|
}
|