def parse_pyc_stream(fi): """Parse pyc data from a file. Args: fi: A file-like object. Returns: An instance of loadmarshal.CodeType. Raises: IOError: If we can't read the file or the file is malformed. """ magic_word = fi.read(2) python_version = magic.magic_word_to_version(magic_word) crlf = fi.read(2) # cr, lf if crlf != "\r\n": raise IOError("Malformed pyc file") fi.read(4) # timestamp if python_version >= (3, 3): # This field was introduced in Python 3.3 fi.read(4) # raw size return loadmarshal.loads(fi.read(), python_version)
def parse_pyc_stream(fi): """Parse pyc data from a file. Args: fi: A file-like object. Returns: An instance of loadmarshal.CodeType. Raises: IOError: If we can't read the file or the file is malformed. """ magic_word = fi.read(2) python_version = magic.magic_word_to_version(magic_word) crlf = fi.read(2) # cr, lf if crlf != b"\r\n": raise IOError("Malformed pyc file") fi.read(4) # timestamp if python_version >= (3, 3): # This field was introduced in Python 3.3 fi.read(4) # raw size return loadmarshal.loads(fi.read(), python_version)
def test_to_version(self): self.assertEqual(magic.magic_word_to_version(b'\x03\xf3'), (2, 7)) self.assertEqual(magic.magic_word_to_version(b'\xee\x0c'), (3, 4)) self.assertEqual(magic.magic_word_to_version(b'\x17\x0d'), (3, 5)) self.assertEqual(magic.magic_word_to_version(b'\x33\x0d'), (3, 6)) self.assertEqual(magic.magic_word_to_version(b'\x42\x0d'), (3, 7))
def test_to_version(self): self.assertEquals(magic.magic_word_to_version('\x03\xf3'), (2, 7)) self.assertEquals(magic.magic_word_to_version('\xee\x0c'), (3, 4))
def test_to_version(self): self.assertEquals(magic.magic_word_to_version('\x03\xf3'), (2, 7)) self.assertEquals(magic.magic_word_to_version('\xee\x0c'), (3, 4))