From e9ac4bef2065abe545fbc7e8712c027f573082b3 Mon Sep 17 00:00:00 2001 From: Aldo Cortesi Date: Tue, 27 Mar 2012 11:25:50 +1300 Subject: Add a variant of cleanBin that escapes newlines and tabs. Use this to fix the hex display option. --- libmproxy/utils.py | 13 ++++++++++--- test/test_utils.py | 10 ++++++++++ 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/libmproxy/utils.py b/libmproxy/utils.py index bcf9d141..b4e317c5 100644 --- a/libmproxy/utils.py +++ b/libmproxy/utils.py @@ -54,11 +54,18 @@ def isXML(s): return False -def cleanBin(s): +def cleanBin(s, fixspacing=False): + """ + Cleans binary data to make it safe to display. If fixspacing is True, + tabs, newlines and so forth will be maintained, if not, they will be + replaced with a placeholder. + """ parts = [] for i in s: o = ord(i) - if (o > 31 and o < 127) or i in "\n\r\t": + if (o > 31 and o < 127): + parts.append(i) + elif i in "\n\r\t" and not fixspacing: parts.append(i) else: parts.append(".") @@ -147,7 +154,7 @@ def hexdump(s): x += " " x += " ".join(" " for i in range(16 - len(part))) parts.append( - (o, x, cleanBin(part)) + (o, x, cleanBin(part, True)) ) return parts diff --git a/test/test_utils.py b/test/test_utils.py index d65fa5b4..e445614a 100644 --- a/test/test_utils.py +++ b/test/test_utils.py @@ -224,7 +224,17 @@ class u_parse_content_type(libpry.AutoTree): assert v == ('text', 'html', {'charset': 'UTF-8'}) +class u_cleanBin(libpry.AutoTree): + def test_simple(self): + assert utils.cleanBin("one") == "one" + assert utils.cleanBin("\00ne") == ".ne" + assert utils.cleanBin("\nne") == "\nne" + assert utils.cleanBin("\nne", True) == ".ne" + + + tests = [ + u_cleanBin(), u_parse_content_type(), uformat_timestamp(), uisBin(), -- cgit v1.2.3