Skip to content

Commit 2d79d63

Browse files
tkmikanvboxuser
authored and
vboxuser
committed
fix tube's debug output of same byte compression (Gallopsled#2011)
* fix tube's debug output of same byte compression * Update CHANGELOG.md * move code to `log.maybe_hexdump` * update doc string
1 parent 01390d2 commit 2d79d63

File tree

3 files changed

+20
-25
lines changed

3 files changed

+20
-25
lines changed

CHANGELOG.md

+2-8
Original file line numberDiff line numberDiff line change
@@ -64,15 +64,9 @@ The table below shows which release corresponds to each branch, and what date th
6464

6565
## 4.9.0 (`dev`)
6666

67-
- [#1922][1922] Fix logic in `wait_for_debugger`
68-
- [#1828][1828] libcdb: Load debug info and unstrip libc binary
69-
- [#1939][1939] Fix error in validating log levels
70-
- [#1981][1981] Fix `cyclic_find()` to make it work with large int values
67+
- [#2011][2011] Fix tube's debug output of same byte compression
7168

72-
[1922]: https://github.com/Gallopsled/pwntools/pull/1922
73-
[1828]: https://github.com/Gallopsled/pwntools/pull/1828
74-
[1939]: https://github.com/Gallopsled/pwntools/pull/1939
75-
[1981]: https://github.com/Gallopsled/pwntools/pull/1981
69+
[2011]: https://github.com/Gallopsled/pwntools/pull/2011
7670

7771
## 4.8.0 (`beta`)
7872

pwnlib/log.py

+15
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@
9999
import random
100100
import re
101101
import six
102+
import string
102103
import sys
103104
import threading
104105
import time
@@ -401,6 +402,20 @@ def hexdump(self, message, *args, **kwargs):
401402

402403
self.info(pwnlib.util.fiddling.hexdump(message, *args, **kwargs))
403404

405+
def maybe_hexdump(self, message, *args, **kwargs):
406+
"""maybe_hexdump(self, message, *args, **kwargs)
407+
408+
Logs a message using indented. Repeated single byte is compressed, and
409+
unprintable message is hexdumped.
410+
"""
411+
if len(set(message)) == 1 and len(message) > 1:
412+
self.indented('%r * %#x' % (message[:1], len(message)), *args, **kwargs)
413+
elif len(message) == 1 or all(c in string.printable.encode() for c in message):
414+
for line in message.splitlines(True):
415+
self.indented(repr(line), *args, **kwargs)
416+
else:
417+
import pwnlib.util.fiddling
418+
self.indented(pwnlib.util.fiddling.hexdump(message), *args, **kwargs)
404419

405420
def warning(self, message, *args, **kwargs):
406421
"""warning(message, *args, **kwargs)

pwnlib/tubes/tube.py

+3-17
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
from pwnlib.log import Logger
2020
from pwnlib.timeout import Timeout
2121
from pwnlib.tubes.buffer import Buffer
22-
from pwnlib.util import fiddling
2322
from pwnlib.util import misc
2423
from pwnlib.util import packing
2524

@@ -155,15 +154,7 @@ def _fillbuffer(self, timeout = default):
155154

156155
if data and self.isEnabledFor(logging.DEBUG):
157156
self.debug('Received %#x bytes:' % len(data))
158-
159-
if len(set(data)) == 1 and len(data) > 1:
160-
self.indented('%r * %#x' % (data[0], len(data)), level = logging.DEBUG)
161-
elif all(c in string.printable.encode() for c in data):
162-
for line in data.splitlines(True):
163-
self.indented(repr(line), level = logging.DEBUG)
164-
else:
165-
self.indented(fiddling.hexdump(data), level = logging.DEBUG)
166-
157+
self.maybe_hexdump(data, level=logging.DEBUG)
167158
if data:
168159
self.buffer.add(data)
169160

@@ -767,13 +758,8 @@ def send(self, data):
767758

768759
if self.isEnabledFor(logging.DEBUG):
769760
self.debug('Sent %#x bytes:' % len(data))
770-
if len(set(data)) == 1:
771-
self.indented('%r * %#x' % (data[0], len(data)))
772-
elif all(c in string.printable.encode() for c in data):
773-
for line in data.splitlines(True):
774-
self.indented(repr(line), level = logging.DEBUG)
775-
else:
776-
self.indented(fiddling.hexdump(data), level = logging.DEBUG)
761+
self.maybe_hexdump(data, level=logging.DEBUG)
762+
777763
self.send_raw(data)
778764

779765
def sendline(self, line=b''):

0 commit comments

Comments
 (0)