Esempio n. 1
0
    def read_cfheader(self, handle):
        """
        This method creates and returns a new CFHEADER object from the data read
        """

        parameters = {}
        signature = handle.read(4)
        if signature != "MSCF":
            raise Exception("Not a valid CAB File")
        parameters["reserved1"] = self._read_dword(handle)
        parameters["cbCabinet"] = self._read_dword(handle)
        parameters["reserved2"] = self._read_dword(handle)
        parameters["coffFiles"] = self._read_dword(handle)
        parameters["reserved3"] = self._read_dword(handle)
        parameters["versionMinor"] = self._read_byte(handle)
        parameters["versionMajor"] = self._read_byte(handle)
        parameters["cFolders"] = self._read_word(handle)
        parameters["cFiles"] =self._read_word(handle)
        parameters["flags"] = self._read_word(handle)
        parameters["setID"] = self._read_word(handle)
        parameters["iCabinet"] = self._read_word(handle)

        if parameters["flags"] & CFHEADER.cfhdrRESERVE_PRESENT:
            parameters["cbCFHeader"] = self._read_word(handle)
            parameters["cbCFFolder"] = self._read_byte(handle)
            parameters["cbCFData"] = self._read_byte(handle)
            parameters["abReserve"] = handle.read(parameters["cbCFHeader"])
        else:
            parameters["cbCFHeader"] = 0
            parameters["cbCFFolder"] = 0
            parameters["cbCFData"] = 0
            parameters["abReserve"] = ""

        if parameters["flags"] & CFHEADER.cfhdrPREV_CABINET:
            szCabinetPrev = handle.read(1)
            while szCabinetPrev[-1] != "\x00":
                szCabinetPrev += handle.read(1)
            parameters["szCabinetPrev"] = szCabinetPrev
            szDiskPrev = handle.read(1)
            while szDiskPrev[-1] != "\x00":
                szDiskPrev += handle.read(1)
            parameters["szDiskPrev"] = szDiskPrev
        else:
            parameters["szCabinetPrev"] = ""
            parameters["szDiskPrev"] = ""

        if parameters["flags"] & CFHEADER.cfhdrNEXT_CABINET:
            szCabinetNext = handle.read(1)
            while szCabinetNext[-1] != "\x00":
                szCabinetNext += handle.read(1)
            parameters["szCabinetNext"] = szCabinetNext
            szDiskNext = handle.read(1)
            while szDiskNext[-1] != "\x00":
                szDiskNext += handle.read(1)
            parameters["szDiskNext"] = szDiskNext
        else:
            parameters["szCabinetNext"] = ""
            parameters["szDiskNext"] = ""

        return CFHEADER.create_from_parameters(parameters=parameters)
Esempio n. 2
0
    def test_cfheader_create_from_params(self):
        """
        This method tests the creation with parameters interface
        """
        params = {
            "reserved1": 0xCAFEBABE,
            "cbCabinet": 0x1000,
            "reserved2": 0xCAFEBABE,
            "coffFiles": 0x1000,
            "reserved3": 0xCAFEBABE,
            "versionMinor": 0x4d,
            "versionMajor": 0x5a,
            "cFolders": 0x1000,
            "cFiles": 0x1000,
            "flags": 0,
            "setID": 0x4141,
            "iCabinet": 0,
            "cbCFHeader": 0xFFFF,
            "cbCFFolder": 0xFF,
            "cbCFData": 0xFF,
            "abReserve": "t r a v e s t i s",
            "szCabinetPrev": "Cab Not Found",
            "szDiskPrev": "Disk Not Found",
            "szCabinetNext": "Cab Not Found",
            "szDiskNext": "Disk Not Found",
        }

        cfheader = CFHEADER.create_from_parameters(parameters=params)

        self.assertEquals("MSCF", cfheader.signature)
        self.assertEquals(0xCAFEBABE, cfheader.reserved1)
        self.assertEquals(0x1000, cfheader.cbCabinet)
        self.assertEquals(0xCAFEBABE, cfheader.reserved2)
        self.assertEquals(0x1000, cfheader.coffFiles)
        self.assertEquals(0xCAFEBABE, cfheader.reserved3)
        self.assertEquals(
            "MZ",
            chr(cfheader.versionMinor) + chr(cfheader.versionMajor))
        self.assertEquals(0x1000, cfheader.cFolders)
        self.assertEquals(0x1000, cfheader.cFiles)
        self.assertEquals(0x00, cfheader.flags)
        self.assertEquals(0x4141, cfheader.setID)
        self.assertEquals(0x00, cfheader.iCabinet)
        self.assertEquals(0xFFFF, cfheader.cbCFHeader)
        self.assertEquals(0xFF, cfheader.cbCFFolder)
        self.assertEquals(0xFF, cfheader.cbCFData)
        self.assertEquals("t r a v e s t i s", cfheader.abReserve)
        self.assertEquals("Cab Not Found", cfheader.szCabinetPrev)
        self.assertEquals("Disk Not Found", cfheader.szDiskPrev)
        self.assertEquals("Cab Not Found", cfheader.szCabinetNext)
        self.assertEquals("Disk Not Found", cfheader.szDiskNext)
        self.assertEquals(len(cfheader), len(cfheader._repr_without_checks()))
Esempio n. 3
0
    def test_cfheader_create_from_params(self):
        """
        This method tests the creation with parameters interface
        """
        params = {
            "reserved1": 0xCAFEBABE,
            "cbCabinet": 0x1000,
            "reserved2": 0xCAFEBABE,
            "coffFiles": 0x1000,
            "reserved3": 0xCAFEBABE,
            "versionMinor": 0x4d,
            "versionMajor": 0x5a,
            "cFolders": 0x1000,
            "cFiles": 0x1000,
            "flags": 0,
            "setID": 0x4141,
            "iCabinet": 0,
            "cbCFHeader": 0xFFFF,
            "cbCFFolder": 0xFF,
            "cbCFData": 0xFF,
            "abReserve": "t r a v e s t i s",
            "szCabinetPrev": "Cab Not Found",
            "szDiskPrev": "Disk Not Found",
            "szCabinetNext": "Cab Not Found",
            "szDiskNext": "Disk Not Found",
            }

        cfheader = CFHEADER.create_from_parameters(parameters=params)

        self.assertEquals("MSCF", cfheader.signature)
        self.assertEquals(0xCAFEBABE, cfheader.reserved1)
        self.assertEquals(0x1000, cfheader.cbCabinet)
        self.assertEquals(0xCAFEBABE, cfheader.reserved2)
        self.assertEquals(0x1000, cfheader.coffFiles)
        self.assertEquals(0xCAFEBABE, cfheader.reserved3)
        self.assertEquals("MZ", chr(cfheader.versionMinor)+chr(cfheader.versionMajor))
        self.assertEquals(0x1000, cfheader.cFolders)
        self.assertEquals(0x1000, cfheader.cFiles)
        self.assertEquals(0x00, cfheader.flags)
        self.assertEquals(0x4141, cfheader.setID)
        self.assertEquals(0x00, cfheader.iCabinet)
        self.assertEquals(0xFFFF, cfheader.cbCFHeader)
        self.assertEquals(0xFF, cfheader.cbCFFolder)
        self.assertEquals(0xFF, cfheader.cbCFData)
        self.assertEquals("t r a v e s t i s", cfheader.abReserve)
        self.assertEquals("Cab Not Found", cfheader.szCabinetPrev)
        self.assertEquals("Disk Not Found", cfheader.szDiskPrev)
        self.assertEquals("Cab Not Found", cfheader.szCabinetNext)
        self.assertEquals("Disk Not Found", cfheader.szDiskNext)
        self.assertEquals(len(cfheader), len(cfheader._repr_without_checks()))