From bdc04723b09cded7f7bac95103093a98d0ec76b0 Mon Sep 17 00:00:00 2001 From: AlanCoding Date: Tue, 31 Jan 2017 15:30:39 -0500 Subject: [PATCH] deal with case that can cause memory errors --- awx/main/models/jobs.py | 2 ++ awx/main/redact.py | 2 ++ awx/main/tests/unit/models/test_survey_models.py | 6 ++++++ 3 files changed, 10 insertions(+) diff --git a/awx/main/models/jobs.py b/awx/main/models/jobs.py index 39760dbd42..6c19d973a2 100644 --- a/awx/main/models/jobs.py +++ b/awx/main/models/jobs.py @@ -609,6 +609,8 @@ class Job(UnifiedJob, JobOptions, SurveyJobMixin, JobNotificationMixin): if k in job_extra_vars] return_content = content for val in password_list: + if len(val) == 0: + continue # avoids memory errors return_content = PlainTextCleaner.remove_sensitive(return_content, val) return return_content diff --git a/awx/main/redact.py b/awx/main/redact.py index a4776601ac..5f945ae9b7 100644 --- a/awx/main/redact.py +++ b/awx/main/redact.py @@ -58,4 +58,6 @@ class PlainTextCleaner(object): @staticmethod def remove_sensitive(cleartext, sensitive): + if sensitive == '': + return cleartext return re.sub(r'%s' % re.escape(sensitive), '$encrypted$', cleartext) diff --git a/awx/main/tests/unit/models/test_survey_models.py b/awx/main/tests/unit/models/test_survey_models.py index 4ec177de68..3d9b44bcca 100644 --- a/awx/main/tests/unit/models/test_survey_models.py +++ b/awx/main/tests/unit/models/test_survey_models.py @@ -61,6 +61,11 @@ def test_survey_passwords_not_in_extra_vars(): @pytest.mark.survey def test_survey_passwords_not_in_stdout(job_with_survey): + job_with_survey.survey_passwords['has_blank_value'] = '$encrypted$' + job_with_survey.extra_vars = json.dumps({ + 'has_blank_value': '', + 'secret_key': '6kQngg3h8lgiSTvIEb21', + 'SSN': '123-45-6789'}) example_stdout = ''' PLAY [all] ********************************************************************* @@ -77,6 +82,7 @@ TASK [debug] ******************************************************************* display_stdout = job_with_survey._survey_search_and_replace(example_stdout) assert display_stdout == example_stdout.replace( '6kQngg3h8lgiSTvIEb21', '$encrypted$').replace('123-45-6789', '$encrypted$') + assert type(display_stdout) == type(example_stdout)