Skip to content

Commit

Permalink
Prefixed Transformed ProcessXor updated, GreedyBytes performance upgrade
Browse files Browse the repository at this point in the history
  • Loading branch information
arekbulski committed Mar 28, 2018
1 parent 9105331 commit 2dd86ba
Showing 1 changed file with 10 additions and 7 deletions.
17 changes: 10 additions & 7 deletions construct/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -4561,8 +4561,10 @@ def _parse(self, stream, context, path):
length = self.lengthfield._parsereport(stream, context, path)
if self.includelength:
length -= self.lengthfield._sizeof(context, path)
stream2 = io.BytesIO(_read_stream(stream, length))
return self.subcon._parsereport(stream2, context, path)
data = _read_stream(stream, length)
if self.subcon is GreedyBytes and not self.subcon.parsed:
return data
return self.subcon._parsereport(io.BytesIO(data), context, path)

def _build(self, obj, stream, context, path):
stream2 = io.BytesIO()
Expand Down Expand Up @@ -4913,9 +4915,9 @@ def _parse(self, stream, context, path):
if isinstance(self.decodeamount, integertypes):
data = _read_stream(stream, self.decodeamount)
data = self.decodefunc(data)
stream2 = io.BytesIO(data)
obj = self.subcon._parsereport(stream2, context, path)
return obj
if self.subcon is GreedyBytes and not self.subcon.parsed:
return data
return self.subcon._parsereport(io.BytesIO(data), context, path)

def _build(self, obj, stream, context, path):
stream2 = io.BytesIO()
Expand Down Expand Up @@ -5026,8 +5028,9 @@ def _parse(self, stream, context, path):
data = bytes(bytearray((b ^ pad) for b in iterateints(data)))
if isinstance(pad, bytestringtype):
data = bytes(bytearray((b ^ p) for b,p in zip(iterateints(data), itertools.cycle(iterateints(pad)))))
stream2 = io.BytesIO(data)
return self.subcon._parsereport(stream2, context, path)
if self.subcon is GreedyBytes and not self.subcon.parsed:
return data
return self.subcon._parsereport(io.BytesIO(data), context, path)

def _build(self, obj, stream, context, path):
pad = evaluate(self.padfunc, context)
Expand Down

0 comments on commit 2dd86ba

Please sign in to comment.