summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYuval Adam <_@yuv.al>2018-03-09 11:23:18 +0200
committerYuval Adam <_@yuv.al>2018-03-09 11:23:18 +0200
commit519590839ec777b5b95a7779180fba9a0d03c05a (patch)
tree0fc3f8b31047edef46203fc6068f6a5e675b9348
parentc940933e2183e3d23b57212d187dabf201b4cf4f (diff)
Add triplet support
-rw-r--r--tests/test_parse.py4
-rw-r--r--viewstate/parse.py8
2 files changed, 12 insertions, 0 deletions
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: