From 58c8ca759cce09ef7da2d15cb067403c22719f01 Mon Sep 17 00:00:00 2001 From: Richard Belleville Date: Fri, 14 Sep 2018 12:12:04 -0500 Subject: [PATCH] Fix behavior with respect to forbidden characters --- pyhocon/config_parser.py | 2 +- samples/aws.conf | 2 +- tests/test_config_parser.py | 10 +++++----- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/pyhocon/config_parser.py b/pyhocon/config_parser.py index 2c5cda7f..59789375 100644 --- a/pyhocon/config_parser.py +++ b/pyhocon/config_parser.py @@ -301,7 +301,7 @@ def include_config(instring, loc, token): # line1 \ # line2 \ # so a backslash precedes the \n - unquoted_string = Regex('(?:[^"\[\{\s\]\}#,=\$\\\\]|\\\\.)+[ \t]*', re.UNICODE).setParseAction(unescape_string) + unquoted_string = Regex('(?:[^^`+?!@*&"\[\{\s\]\}#,=\$\\\\]|\\\\.)+[ \t]*', re.UNICODE).setParseAction(unescape_string) substitution_expr = Regex('[ \t]*\$\{[^\}]+\}[ \t]*').setParseAction(create_substitution) string_expr = multiline_string | quoted_string | unquoted_string diff --git a/samples/aws.conf b/samples/aws.conf index 9698efeb..86399f5a 100644 --- a/samples/aws.conf +++ b/samples/aws.conf @@ -4,6 +4,6 @@ data-center-east = ${data-center-generic} { name = "east" } // list merge - default-jvm-opts = [-XX:+UseParNewGC] + default-jvm-opts = ["-XX:+UseParNewGC"] large-jvm-opts = ${default-jvm-opts} [-Xm16g] } diff --git a/tests/test_config_parser.py b/tests/test_config_parser.py index 1467d056..43fc4679 100644 --- a/tests/test_config_parser.py +++ b/tests/test_config_parser.py @@ -5,7 +5,7 @@ import mock import tempfile from collections import OrderedDict -from pyparsing import ParseSyntaxException, ParseException +from pyparsing import ParseSyntaxException, ParseException, ParseBaseException import pytest from pyhocon import ConfigFactory, ConfigSubstitutionException, ConfigTree, ConfigParser from pyhocon.exceptions import ConfigMissingException, ConfigWrongTypeException, ConfigException @@ -52,7 +52,7 @@ def test_parse_simple_value(self): @pytest.mark.parametrize('forbidden_char', ['+', '`', '^', '?', '!', '@', '*', '&']) def test_fail_parse_forbidden_characters(self, forbidden_char): - with pytest.raises(ParseSyntaxException): + with pytest.raises(ParseBaseException): config = ConfigFactory.parse_string('a: hey man{}'.format(forbidden_char)) @pytest.mark.parametrize('forbidden_char', ['$', '"']) @@ -602,8 +602,8 @@ def test_substitution_list_with_append(self): config = ConfigFactory.parse_string( """ application.foo = 128m - application.large-jvm-opts = [-XX:+UseParNewGC] [-Xm16g, ${application.foo}] - application.large-jvm-opts2 = [-Xm16g, ${application.foo}] [-XX:+UseParNewGC] + application.large-jvm-opts = ["-XX:+UseParNewGC"] [-Xm16g, ${application.foo}] + application.large-jvm-opts2 = [-Xm16g, ${application.foo}] ["-XX:+UseParNewGC"] """) assert config["application.large-jvm-opts"] == [ @@ -622,7 +622,7 @@ def test_substitution_list_with_append_substitution(self): config = ConfigFactory.parse_string( """ application.foo = 128m - application.default-jvm-opts = [-XX:+UseParNewGC] + application.default-jvm-opts = ["-XX:+UseParNewGC"] application.large-jvm-opts = ${application.default-jvm-opts} [-Xm16g, ${application.foo}] application.large-jvm-opts2 = [-Xm16g, ${application.foo}] ${application.default-jvm-opts} """)