Commit 58095dbaf07307b04af06ae0a28084c4202fa82b

Authored by Samir Aguiar
1 parent a6e0099f

rtfobj: remove check for uppercased RTF magic

Word does not accept files which magic is not fully
lowercase.
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))
... ...