mirror of
https://github.com/pallets-eco/flask-debugtoolbar.git
synced 2025-12-30 10:09:30 -06:00
printable filter should replace non-ascii bytes
In Python 2, when repr() returns bytes, replace any non-ascii bytes with the unicode ? character to ensure that the result is printable. Fixes #66
This commit is contained in:
@@ -30,7 +30,10 @@ def replace_insensitive(string, target, replacement):
|
||||
|
||||
def _printable(value):
|
||||
try:
|
||||
return repr(value)
|
||||
value = repr(value)
|
||||
if isinstance(value, bytes):
|
||||
value = value.decode('ascii', 'replace')
|
||||
return value
|
||||
except Exception as e:
|
||||
return '<repr(%s) raised %s: %s>' % (
|
||||
object.__repr__(value), type(e).__name__, e)
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
import sys
|
||||
|
||||
import pytest
|
||||
|
||||
from flask_debugtoolbar import _printable
|
||||
|
||||
|
||||
def load_app(name):
|
||||
app = __import__(name).app
|
||||
app.config['TESTING'] = True
|
||||
@@ -9,3 +16,26 @@ def test_basic_app():
|
||||
index = app.get('/')
|
||||
assert index.status_code == 200
|
||||
assert b'<div id="flDebug"' in index.data
|
||||
|
||||
|
||||
@pytest.mark.skipif(sys.version_info >= (3,),
|
||||
reason='test only applies to Python 2')
|
||||
def test_printable_unicode():
|
||||
class UnicodeRepr(object):
|
||||
def __repr__(self):
|
||||
return u'\uffff'
|
||||
|
||||
printable = _printable(UnicodeRepr())
|
||||
assert "raised UnicodeEncodeError: 'ascii' codec" in printable
|
||||
|
||||
|
||||
@pytest.mark.skipif(sys.version_info >= (3,),
|
||||
reason='test only applies to Python 2')
|
||||
def test_printable_non_ascii():
|
||||
class NonAsciiRepr(object):
|
||||
def __repr__(self):
|
||||
return 'a\xffb'
|
||||
|
||||
printable = u'%s' % _printable(NonAsciiRepr())
|
||||
# should replace \xff with the unicode ? character
|
||||
assert printable == u'a\ufffdb'
|
||||
|
||||
Reference in New Issue
Block a user