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)
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()))
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()))