Commit 58095dbaf07307b04af06ae0a28084c4202fa82b
1 parent
a6e0099f
rtfobj: remove check for uppercased RTF magic
Word does not accept files which magic is not fully lowercase.
Showing
2 changed files
with
13 additions
and
12 deletions
oletools/rtfobj.py
| ... | ... | @@ -690,35 +690,36 @@ def is_rtf(arg, treat_str_as_data=False): |
| 690 | 690 | magic_len = len(RTF_MAGIC) |
| 691 | 691 | if isinstance(arg, UNICODE_TYPE): |
| 692 | 692 | with open(arg, 'rb') as reader: |
| 693 | - return reader.read(len(RTF_MAGIC)).lower() == RTF_MAGIC | |
| 693 | + return reader.read(len(RTF_MAGIC)) == RTF_MAGIC | |
| 694 | 694 | if isinstance(arg, bytes) and not isinstance(arg, str): # only in PY3 |
| 695 | - return arg[:magic_len].lower() == RTF_MAGIC | |
| 695 | + return arg[:magic_len] == RTF_MAGIC | |
| 696 | 696 | if isinstance(arg, bytearray): |
| 697 | - return arg[:magic_len].lower() == RTF_MAGIC | |
| 697 | + return arg[:magic_len] == RTF_MAGIC | |
| 698 | 698 | if isinstance(arg, str): # could be bytes, but we assume file name |
| 699 | 699 | if treat_str_as_data: |
| 700 | 700 | try: |
| 701 | - return arg[:magic_len].encode('ascii', errors='strict').lower()\ | |
| 701 | + return arg[:magic_len].encode('ascii', errors='strict')\ | |
| 702 | 702 | == RTF_MAGIC |
| 703 | 703 | except UnicodeError: |
| 704 | 704 | return False |
| 705 | 705 | else: |
| 706 | 706 | with open(arg, 'rb') as reader: |
| 707 | - return reader.read(len(RTF_MAGIC)).lower() == RTF_MAGIC | |
| 707 | + return reader.read(len(RTF_MAGIC)) == RTF_MAGIC | |
| 708 | 708 | if hasattr(arg, 'read'): # a stream (i.e. file-like object) |
| 709 | - return arg.read(len(RTF_MAGIC)).lower() == RTF_MAGIC | |
| 709 | + return arg.read(len(RTF_MAGIC)) == RTF_MAGIC | |
| 710 | 710 | if isinstance(arg, (list, tuple)): |
| 711 | 711 | iter_arg = iter(arg) |
| 712 | 712 | else: |
| 713 | 713 | iter_arg = arg |
| 714 | 714 | |
| 715 | 715 | # check iterable |
| 716 | - for magic_byte, upper_cased in zip(RTF_MAGIC, RTF_MAGIC.upper()): | |
| 716 | + for magic_byte in zip(RTF_MAGIC): | |
| 717 | 717 | try: |
| 718 | - if next(iter_arg) not in (magic_byte, upper_cased): | |
| 718 | + if next(iter_arg) not in magic_byte: | |
| 719 | 719 | return False |
| 720 | 720 | except StopIteration: |
| 721 | 721 | return False |
| 722 | + | |
| 722 | 723 | return True # checked the complete magic without returning False --> match |
| 723 | 724 | |
| 724 | 725 | ... | ... |
tests/rtfobj/test_is_rtf.py
| ... | ... | @@ -18,13 +18,13 @@ class TestIsRtf(unittest.TestCase): |
| 18 | 18 | def test_bytearray(self): |
| 19 | 19 | """ test that is_rtf works with bytearray """ |
| 20 | 20 | self.assertTrue(is_rtf(bytearray(RTF_MAGIC + b'asdfasdfasdfasdfasdf'))) |
| 21 | - self.assertTrue(is_rtf(bytearray(RTF_MAGIC.upper() + b'asdfasdasdff'))) | |
| 21 | + self.assertFalse(is_rtf(bytearray(RTF_MAGIC.upper() + b'asdfasdasdff'))) | |
| 22 | 22 | self.assertFalse(is_rtf(bytearray(b'asdfasdfasdfasdfasdfasdfsdfsdfa'))) |
| 23 | 23 | |
| 24 | 24 | def test_bytes(self): |
| 25 | 25 | """ test that is_rtf works with bytearray """ |
| 26 | 26 | self.assertTrue(is_rtf(RTF_MAGIC + b'asasdffdfasdfasdfasdfasdf', True)) |
| 27 | - self.assertTrue(is_rtf(RTF_MAGIC.upper() + b'asdffasdfasdasdff', True)) | |
| 27 | + self.assertFalse(is_rtf(RTF_MAGIC.upper() + b'asdffasdfasdasdff', True)) | |
| 28 | 28 | self.assertFalse(is_rtf(b'asdfasdfasdfasdfasdfasdasdfffsdfsdfa', True)) |
| 29 | 29 | |
| 30 | 30 | def test_tuple(self): |
| ... | ... | @@ -33,7 +33,7 @@ class TestIsRtf(unittest.TestCase): |
| 33 | 33 | self.assertTrue(is_rtf(data)) |
| 34 | 34 | |
| 35 | 35 | data = tuple(byte_char for byte_char in RTF_MAGIC.upper() + b'asfasdf') |
| 36 | - self.assertTrue(is_rtf(data)) | |
| 36 | + self.assertFalse(is_rtf(data)) | |
| 37 | 37 | |
| 38 | 38 | data = tuple(byte_char for byte_char in b'asdfasfassdfsdsfeereasdfwdf') |
| 39 | 39 | self.assertFalse(is_rtf(data)) |
| ... | ... | @@ -44,7 +44,7 @@ class TestIsRtf(unittest.TestCase): |
| 44 | 44 | self.assertTrue(is_rtf(data)) |
| 45 | 45 | |
| 46 | 46 | data = (byte_char for byte_char in RTF_MAGIC.upper() + b'asdfassfasdf') |
| 47 | - self.assertTrue(is_rtf(data)) | |
| 47 | + self.assertFalse(is_rtf(data)) | |
| 48 | 48 | |
| 49 | 49 | data = (byte_char for byte_char in b'asdfasfasasdfasdfasdfsdfdwerwedf') |
| 50 | 50 | self.assertFalse(is_rtf(data)) | ... | ... |