Beispiel #1
0
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)
Beispiel #2
0
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)
Beispiel #3
0
 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))
Beispiel #4
0
 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))
Beispiel #5
0
 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))