diff options
| author | Yuval Adam <_@yuv.al> | 2018-02-27 12:45:12 +0200 |
|---|---|---|
| committer | Yuval Adam <_@yuv.al> | 2018-02-27 12:57:10 +0200 |
| commit | a5e675be5d52389ea806e834e303eca4dc8047f5 (patch) | |
| tree | 27f5267c881577901bd4615131de7e10d969b3bc | |
| parent | b07ed7f89ce2fcc29585e746ea3db4b599ee3c67 (diff) | |
Add sparse array support
| -rw-r--r-- | viewstate/parse.py | 15 |
1 files changed, 15 insertions, 0 deletions
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() |
