bitbake: parse: Forbid ambiguous assignments to ${.}, ${+}, and ${:} variables

Old code that parse variable names in assignment commands behave differently for
variables that ends with special symbol for single-character variable names and
multi-character variable names. For example:

  A+="1"   # Change variable ${A}, '+' glued to '='
  A+ = "1" # Change variable ${A+}

  +="1"    # Change variable ${+}, the '+' symbol not part of assignment operator
  + = "1"  # Change variable ${+}

New code would always assume that '.=', '+=', and ':=' is assignment operator.
As result code like the following would raise parsing error

  +="value"

While code with extra spaces would work as before

  + = "value" # Change variable ${+}

This change allow to catch issues in code that generate bitbake configuration
files in a manner like "echo ${VARNAME}+=${VALUE} >> conf/local.conf"

(Bitbake rev: 93059aad13a12cd69d86368795c88e5349197d5d)

Signed-off-by: Nikolai Merinov <n.merinov@inango-systems.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Nikolai Merinov
2025-02-04 09:13:46 +02:00
committed by Richard Purdie
parent c2da016918
commit b65452bda3
2 changed files with 23 additions and 1 deletions

View File

@@ -443,3 +443,23 @@ include \\
in_file.write("\n".join(lines))
in_file.flush()
bb.parse.handle(recipename_closed, bb.data.createCopy(self.d))
special_character_assignment = """
A+="a"
A+ = "b"
+ = "c"
"""
ambigous_assignment = """
+= "d"
"""
def test_parse_special_character_assignment(self):
f = self.parsehelper(self.special_character_assignment)
d = bb.parse.handle(f.name, self.d)['']
self.assertEqual(d.getVar("A"), " a")
self.assertEqual(d.getVar("A+"), "b")
self.assertEqual(d.getVar("+"), "c")
f = self.parsehelper(self.ambigous_assignment)
with self.assertRaises(bb.parse.ParseError) as error:
bb.parse.handle(f.name, self.d)
self.assertIn("Empty variable name in assignment", str(error.exception))