diff --git a/debug_toolbar/panels/sql/tracking.py b/debug_toolbar/panels/sql/tracking.py index 204cfa13c..1a0fbf65d 100644 --- a/debug_toolbar/panels/sql/tracking.py +++ b/debug_toolbar/panels/sql/tracking.py @@ -88,6 +88,8 @@ def _quote_expr(self, element): return "'%s'" % force_text(element).replace("'", "''") except DjangoUnicodeDecodeError: return repr(element) + elif isinstance(element, six.binary_type): + return '(binary data)' else: return repr(element) diff --git a/tests/panels/test_sql.py b/tests/panels/test_sql.py index b46ece32d..3301a5725 100644 --- a/tests/panels/test_sql.py +++ b/tests/panels/test_sql.py @@ -122,6 +122,19 @@ def test_param_conversion(self): '["2017-12-22 16:07:01"]' )) + @unittest.skipUnless(connection.vendor != 'sqlite', + 'Test invalid for SQLite') + def test_binary_param_force_text(self): + self.assertEqual(len(self.panel._queries), 0) + + with connection.cursor() as cursor: + cursor.execute("SELECT * FROM auth_user WHERE username = %s", [b'\xff']) + + self.assertEqual(len(self.panel._queries), 1) + + self.panel.process_response(self.request, self.response) + self.panel.generate_stats(self.request, self.response) + @unittest.skipUnless(connection.vendor != 'sqlite', 'Test invalid for SQLite') def test_raw_query_param_conversion(self):