From bbc9a8080ec42829eee00fd154b85fd83aa800fc Mon Sep 17 00:00:00 2001 From: whitequark Date: Sun, 22 Sep 2019 06:57:28 +0000 Subject: [PATCH] build.plat: restrict design names to alphanumeric to avoid quoting issues. --- nmigen/build/plat.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/nmigen/build/plat.py b/nmigen/build/plat.py index 4b80dfc..d5c1060 100644 --- a/nmigen/build/plat.py +++ b/nmigen/build/plat.py @@ -257,6 +257,17 @@ class TemplatedPlatform(Platform): } def toolchain_prepare(self, fragment, name, **kwargs): + # Restrict the name of the design to a strict alphanumeric character set. Platforms will + # interpolate the name of the design in many different contexts: filesystem paths, Python + # scripts, Tcl scripts, ad-hoc constraint files, and so on. It is not practical to add + # escaping code that handles every one of their edge cases, so make sure we never hit them + # in the first place. + invalid_char = re.match(r"[^A-Za-z0-9_]", name) + if invalid_char: + raise ValueError("Design name {!r} contains invalid character {!r}; only alphanumeric " + "characters are valid in design names" + .format(name, invalid_char.group(0))) + # This notice serves a dual purpose: to explain that the file is autogenerated, # and to incorporate the nMigen version into generated code. autogenerated = "Automatically generated by nMigen {}. Do not edit.".format(__version__) -- 2.30.2