From 519590839ec777b5b95a7779180fba9a0d03c05a Mon Sep 17 00:00:00 2001 From: Yuval Adam <_@yuv.al> Date: Fri, 9 Mar 2018 11:23:18 +0200 Subject: Add triplet support --- tests/test_parse.py | 4 ++++ viewstate/parse.py | 8 ++++++++ 2 files changed, 12 insertions(+) diff --git a/tests/test_parse.py b/tests/test_parse.py index bc213eb..862cf24 100644 --- a/tests/test_parse.py +++ b/tests/test_parse.py @@ -32,6 +32,10 @@ class TestParse(object): vs = ViewState(raw=b'\xff\x01\x0f\x67\x68') assert vs.decode() == (True, False) + def test_simple_triplet(self): + vs = ViewState(raw=b'\xff\x01\x10\x67\x68\x67') + assert vs.decode() == (True, False, True) + def test_complex_pair(self): vs = ViewState() vs.raw = b'\xff\x01\x0f\x67\x0f\x68\x66' diff --git a/viewstate/parse.py b/viewstate/parse.py index 6eee3fa..2afca9a 100644 --- a/viewstate/parse.py +++ b/viewstate/parse.py @@ -43,6 +43,12 @@ def parse_pair(b): second, remain = parse(remain) return (first, second), remain +def parse_triplet(b): + first, remain = parse(b) + second, remain = parse(remain) + third, remain = parse(remain) + return (first, second, third), remain + def parse_str_array(b): n, remain = parse_int(b) l = [] @@ -116,6 +122,8 @@ def parse(b): return parse_int(b[1:]) elif b[0] in (0x5, 0x1e): return parse_string(b[1:]) + elif b[0] == 0x10: + return parse_triplet(b[1:]) elif b[0] == 0xb: return parse_enum(b[1:]) elif b[0] == 0xf: -- cgit v1.3.1