Helpviewer/FlashCookieManager/FlashCookieReader.py

changeset 4361
9eec3a532d59
parent 4360
b8bdb7cd4a92
child 4370
54dbb658f9e6
equal deleted inserted replaced
4360:b8bdb7cd4a92 4361:9eec3a532d59
104 self.__data.seek(0) 104 self.__data.seek(0)
105 self.__data.read(2) 105 self.__data.read(2)
106 sLenData = self.__data.read(4) 106 sLenData = self.__data.read(4)
107 lenData, = struct.unpack(">L", sLenData) # unsigned long, big-endian 107 lenData, = struct.unpack(">L", sLenData) # unsigned long, big-endian
108 if lenSolData != lenData + 6: 108 if lenSolData != lenData + 6:
109 print("Warning: data length doesn't match.") 109 raise FlashCookieReaderError(
110 "Flash cookie data lengths don't match\n"
111 " file length: {0}\n"
112 " data length: {1}"
113 .format(lenSolData - 6, lenData))
110 sDataType = self.__data.read(4).decode("utf-8") # 'TCSO' 114 sDataType = self.__data.read(4).decode("utf-8") # 'TCSO'
111 if sDataType != "TCSO": 115 if sDataType != "TCSO":
112 raise FlashCookieReaderError( 116 raise FlashCookieReaderError(
113 "Flash cookie type is not 'TCSO'; found '{0}'." 117 "Flash cookie type is not 'TCSO'; found '{0}'."
114 .format(sDataType)) 118 .format(sDataType))
166 b = self.__data.read(8) 170 b = self.__data.read(8)
167 if b == b"\x7F\xF0\x00\x00\x00\x00\x00\x00": 171 if b == b"\x7F\xF0\x00\x00\x00\x00\x00\x00":
168 value = "Infinity" 172 value = "Infinity"
169 elif b == b"\xFF\xF0\x00\x00\x00\x00\x00\x00": 173 elif b == b"\xFF\xF0\x00\x00\x00\x00\x00\x00":
170 value = "-Infinity" 174 value = "-Infinity"
171 elif value == b"\x7F\xF8\x00\x00\x00\x00\x00\x00": 175 elif b == b"\x7F\xF8\x00\x00\x00\x00\x00\x00":
172 value = "NaN" 176 value = "NaN"
173 else: 177 else:
174 value, = struct.unpack(">d", b) # double, big-endian 178 value, = struct.unpack(">d", b) # double, big-endian
175 value = str(value) 179 value = str(value)
176 parent[variableName] = ("number", value) 180 parent[variableName] = ("number", value)
423 else: 427 else:
424 raise FlashCookieReaderError( 428 raise FlashCookieReaderError(
425 "Unexpected Data Type: " + hex(ord(variableType))) 429 "Unexpected Data Type: " + hex(ord(variableType)))
426 lenVariableName, = struct.unpack(">H", self.__data.read(2)) 430 lenVariableName, = struct.unpack(">H", self.__data.read(2))
427 self.__data.read(1) # '\x09' 431 self.__data.read(1) # '\x09'
432
433 def toString(self, indent=0, parent=None):
434 """
435 Public method to convert the parsed cookie to a string representation.
436
437 @param indent indentation level
438 @type int
439 @param parent reference to the dictionary to be converted
440 @type dict
441 @return string representation of the cookie
442 @rtype str
443 """
444 indentStr = " " * indent
445 strArr = []
446
447 if parent is None:
448 parent = self.__result
449
450 if not parent:
451 return ""
452
453 for variableName in sorted(parent.keys()):
454 variableType, value = parent[variableName]
455 if isinstance(value, dict):
456 resultStr = self.toString(indent + 1, value)
457 if resultStr:
458 strArr.append("{0}{1}:\n{2}"
459 .format(indentStr, variableName, resultStr))
460 else:
461 strArr.append("{0}{1}:"
462 .format(indentStr, variableName))
463 else:
464 strArr.append("{0}{1}: {2}"
465 .format(indentStr, variableName, value))
466
467 return "\n".join(strArr)

eric ide

mercurial