From c2d95cefd7c3637a448f63be9983eeedb6d548b6 Mon Sep 17 00:00:00 2001 From: Peter Giacomo Lombardo Date: Wed, 1 Apr 2020 13:42:20 +0200 Subject: [PATCH] Validate Query params before parsing; Add tests to validate --- instana/instrumentation/aws/triggers.py | 8 ++++---- tests/test_lambda.py | 17 +++++++++++++++++ 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/instana/instrumentation/aws/triggers.py b/instana/instrumentation/aws/triggers.py index 0ab51af5..00cee7a9 100644 --- a/instana/instrumentation/aws/triggers.py +++ b/instana/instrumentation/aws/triggers.py @@ -61,15 +61,15 @@ def read_http_query_params(event): @param event: lambda event dict @return: String in the form of "a=b&c=d" """ - # print("multiValueQueryStringParameters=%s" % event['multiValueQueryStringParameters']) - # print("queryStringParameters=%s" % event['queryStringParameters']) + if event is None or type(event) is not dict: + return "" params = [] - if 'multiValueQueryStringParameters' in event: + if 'multiValueQueryStringParameters' in event and event['multiValueQueryStringParameters'] is not None: for key in event['multiValueQueryStringParameters']: params.append("%s=%s" % (key, event['multiValueQueryStringParameters'][key])) return "&".join(params) - elif 'queryStringParameters' in event: + elif 'queryStringParameters' in event and event['queryStringParameters'] is not None: for key in event['queryStringParameters']: params.append("%s=%s" % (key, event['queryStringParameters'][key])) return "&".join(params) diff --git a/tests/test_lambda.py b/tests/test_lambda.py index 5e34c716..0ea1214f 100644 --- a/tests/test_lambda.py +++ b/tests/test_lambda.py @@ -13,6 +13,7 @@ from instana import lambda_handler from instana import get_lambda_handler_or_default from instana.instrumentation.aws.lambda_inst import lambda_handler_with_instana +from instana.instrumentation.aws.triggers import read_http_query_params # Mock Context object @@ -411,3 +412,19 @@ def test_sqs_trigger_tracing(self): message = messages[0] self.assertEqual('arn:aws:sqs:us-west-1:123456789012:MyQueue', message['queue']) + def test_read_query_params(self): + event = { "queryStringParameters": {"foo": "bar" }, + "multiValueQueryStringParameters": { "foo": ["bar"] } } + params = read_http_query_params(event) + self.assertEqual("foo=['bar']", params) + + def test_read_query_params_with_none_data(self): + event = { "queryStringParameters": None, + "multiValueQueryStringParameters": None } + params = read_http_query_params(event) + self.assertEqual("", params) + + def test_read_query_params_with_bad_event(self): + event = None + params = read_http_query_params(event) + self.assertEqual("", params)