From a5e675be5d52389ea806e834e303eca4dc8047f5 Mon Sep 17 00:00:00 2001 From: Yuval Adam <_@yuv.al> Date: Tue, 27 Feb 2018 12:45:12 +0200 Subject: Add sparse array support --- viewstate/parse.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/viewstate/parse.py b/viewstate/parse.py index b9d2ae1..4905c09 100644 --- a/viewstate/parse.py +++ b/viewstate/parse.py @@ -59,6 +59,17 @@ def parse_array(b): l.append(val) return l, remain +def parse_sparse_array(b): + type, remain = parse_type(b) + length, remain = parse_int(remain) + n, remain = parse_int(remain) + l = [None] * length + for _ in range(n): + idx, remain = parse_int(remain) + val, remain = parse(remain) + l[idx] = val + return l, remain + def parse_dict(b): n = b[0] d = {} @@ -101,6 +112,10 @@ def parse(b): return parse_array(b[1:]) elif b[0] == 0x18: return parse_dict(b[1:]) + elif b[0] == 0x1f: + return parse_int(b[1:]) + elif b[0] == 0x3c: + return parse_sparse_array(b[1:]) else: raise ViewStateException(f'Unable to parse remainder of {len(b)} bytes {b[:20]}') return b, bytes() -- cgit v1.3.1