Do not log binary data during request

Do not log binary data during debug logging of a session.
Replace the binary data with the string <binary_data> instead.

sort of a backport of: I5184002f3a21c5e0ee510b21b9a7884c8dccd1e3

Change-Id: I07ddbc3967f297597542f1975004d94c490f6e6b
Related-Bug: 1616105
(cherry picked from commit af770f17b7)
This commit is contained in:
Steve Martinelli 2017-01-03 09:55:09 -05:00
parent 8f872e9a56
commit e5bc019840
2 changed files with 9 additions and 7 deletions

View File

@ -201,6 +201,11 @@ class Session(object):
% self._process_header(header))
if data:
if isinstance(data, six.binary_type):
try:
data = data.decode("ascii")
except UnicodeDecodeError:
data = "<binary_data>"
string_parts.append("-d '%s'" % data)
try:
logger.debug(' '.join(string_parts))

View File

@ -1,3 +1,5 @@
# -*- coding: utf-8 -*-
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
@ -196,7 +198,7 @@ class SessionTests(utils.TestCase):
session = client_session.Session(verify=False)
body = 'RESP'
data = u'unicode_data'
data = u'αβγδ'
self.stub_url('POST', text=body)
session.post(self.TEST_URL, data=data)
@ -222,12 +224,7 @@ class SessionTests(utils.TestCase):
# raise a UnicodeDecodeError)
session.post(unicode(self.TEST_URL), data=data)
self.assertIn("Replaced characters that could not be decoded"
" in log output", self.logger.output)
# Our data payload should have changed to
# include the replacement char
self.assertIn(u"-d 'my data\ufffd'", self.logger.output)
self.assertNotIn('my data', self.logger.output)
def test_logging_cacerts(self):
path_to_certs = '/path/to/certs'