Loading tools/extract_kernel.py +20 −14 Original line number Diff line number Diff line Loading @@ -100,19 +100,25 @@ def dump_configs(input_bytes): return o def try_decompress(cmd, search_bytes, input_bytes): idx = input_bytes.find(search_bytes) if idx < 0: return None idx = 0 def try_decompress_bytes(cmd, input_bytes): sp = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) o, _ = sp.communicate(input=input_bytes[idx:]) o, _ = sp.communicate(input=input_bytes) # ignore errors return o def try_decompress(cmd, search_bytes, input_bytes): idx = 0 while True: idx = input_bytes.find(search_bytes, idx) if idx < 0: raise StopIteration() yield try_decompress_bytes(cmd, input_bytes[idx:]) idx += 1 def decompress_dump(func, input_bytes): """ Run func(input_bytes) first; and if that fails (returns value evaluates to Loading @@ -122,15 +128,15 @@ def decompress_dump(func, input_bytes): if o: return o for cmd, search_bytes in COMPRESSION_ALGO: decompressed = try_decompress(cmd, search_bytes, input_bytes) for decompressed in try_decompress(cmd, search_bytes, input_bytes): if decompressed: o = func(decompressed) o = decompress_dump(func, decompressed) if o: return o # Force decompress the whole file even if header doesn't match decompressed = try_decompress(cmd, b"", input_bytes) decompressed = try_decompress_bytes(cmd, input_bytes) if decompressed: o = func(decompressed) o = decompress_dump(func, decompressed) if o: return o Loading Loading
tools/extract_kernel.py +20 −14 Original line number Diff line number Diff line Loading @@ -100,19 +100,25 @@ def dump_configs(input_bytes): return o def try_decompress(cmd, search_bytes, input_bytes): idx = input_bytes.find(search_bytes) if idx < 0: return None idx = 0 def try_decompress_bytes(cmd, input_bytes): sp = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) o, _ = sp.communicate(input=input_bytes[idx:]) o, _ = sp.communicate(input=input_bytes) # ignore errors return o def try_decompress(cmd, search_bytes, input_bytes): idx = 0 while True: idx = input_bytes.find(search_bytes, idx) if idx < 0: raise StopIteration() yield try_decompress_bytes(cmd, input_bytes[idx:]) idx += 1 def decompress_dump(func, input_bytes): """ Run func(input_bytes) first; and if that fails (returns value evaluates to Loading @@ -122,15 +128,15 @@ def decompress_dump(func, input_bytes): if o: return o for cmd, search_bytes in COMPRESSION_ALGO: decompressed = try_decompress(cmd, search_bytes, input_bytes) for decompressed in try_decompress(cmd, search_bytes, input_bytes): if decompressed: o = func(decompressed) o = decompress_dump(func, decompressed) if o: return o # Force decompress the whole file even if header doesn't match decompressed = try_decompress(cmd, b"", input_bytes) decompressed = try_decompress_bytes(cmd, input_bytes) if decompressed: o = func(decompressed) o = decompress_dump(func, decompressed) if o: return o Loading