diff options
| -rw-r--r-- | bitbake/lib/bb/parse/parse_py/ConfHandler.py | 4 | ||||
| -rw-r--r-- | bitbake/lib/bb/tests/parse.py | 20 |
2 files changed, 23 insertions, 1 deletions
diff --git a/bitbake/lib/bb/parse/parse_py/ConfHandler.py b/bitbake/lib/bb/parse/parse_py/ConfHandler.py index 24f81f7e9e..1bde597254 100644 --- a/bitbake/lib/bb/parse/parse_py/ConfHandler.py +++ b/bitbake/lib/bb/parse/parse_py/ConfHandler.py | |||
| @@ -20,7 +20,7 @@ from bb.parse import ParseError, resolve_file, ast, logger, handle | |||
| 20 | __config_regexp__ = re.compile( r""" | 20 | __config_regexp__ = re.compile( r""" |
| 21 | ^ | 21 | ^ |
| 22 | (?P<exp>export\s+)? | 22 | (?P<exp>export\s+)? |
| 23 | (?P<var>[a-zA-Z0-9\-_+.${}/~:]+?) | 23 | (?P<var>[a-zA-Z0-9\-_+.${}/~:]*?) |
| 24 | (\[(?P<flag>[a-zA-Z0-9\-_+.][a-zA-Z0-9\-_+.@/]*)\])? | 24 | (\[(?P<flag>[a-zA-Z0-9\-_+.][a-zA-Z0-9\-_+.@/]*)\])? |
| 25 | 25 | ||
| 26 | \s* ( | 26 | \s* ( |
| @@ -166,6 +166,8 @@ def feeder(lineno, s, fn, statements, baseconfig=False, conffile=True): | |||
| 166 | m = __config_regexp__.match(s) | 166 | m = __config_regexp__.match(s) |
| 167 | if m: | 167 | if m: |
| 168 | groupd = m.groupdict() | 168 | groupd = m.groupdict() |
| 169 | if groupd['var'] == "": | ||
| 170 | raise ParseError("Empty variable name in assignment: '%s'" % s, fn, lineno); | ||
| 169 | ast.handleData(statements, fn, lineno, groupd) | 171 | ast.handleData(statements, fn, lineno, groupd) |
| 170 | return | 172 | return |
| 171 | 173 | ||
diff --git a/bitbake/lib/bb/tests/parse.py b/bitbake/lib/bb/tests/parse.py index cb60af3641..e3cba67ad4 100644 --- a/bitbake/lib/bb/tests/parse.py +++ b/bitbake/lib/bb/tests/parse.py | |||
| @@ -443,3 +443,23 @@ include \\ | |||
| 443 | in_file.write("\n".join(lines)) | 443 | in_file.write("\n".join(lines)) |
| 444 | in_file.flush() | 444 | in_file.flush() |
| 445 | bb.parse.handle(recipename_closed, bb.data.createCopy(self.d)) | 445 | bb.parse.handle(recipename_closed, bb.data.createCopy(self.d)) |
| 446 | |||
| 447 | special_character_assignment = """ | ||
| 448 | A+="a" | ||
| 449 | A+ = "b" | ||
| 450 | + = "c" | ||
| 451 | """ | ||
| 452 | ambigous_assignment = """ | ||
| 453 | += "d" | ||
| 454 | """ | ||
| 455 | def test_parse_special_character_assignment(self): | ||
| 456 | f = self.parsehelper(self.special_character_assignment) | ||
| 457 | d = bb.parse.handle(f.name, self.d)[''] | ||
| 458 | self.assertEqual(d.getVar("A"), " a") | ||
| 459 | self.assertEqual(d.getVar("A+"), "b") | ||
| 460 | self.assertEqual(d.getVar("+"), "c") | ||
| 461 | |||
| 462 | f = self.parsehelper(self.ambigous_assignment) | ||
| 463 | with self.assertRaises(bb.parse.ParseError) as error: | ||
| 464 | bb.parse.handle(f.name, self.d) | ||
| 465 | self.assertIn("Empty variable name in assignment", str(error.exception)) | ||
