Validate variable names better in assignment.

pull/43/head
Jussi Pakkanen 10 years ago
parent 75a0bc8350
commit c7e3d84f51
  1. 8
      interpreter.py

@ -21,7 +21,7 @@ import build
import optinterpreter import optinterpreter
import wrap import wrap
import mesonlib import mesonlib
import os, sys, platform, subprocess, shutil, uuid import os, sys, platform, subprocess, shutil, uuid, re
class InterpreterException(coredata.MesonException): class InterpreterException(coredata.MesonException):
pass pass
@ -786,16 +786,18 @@ class Interpreter():
if len(args) != 2: if len(args) != 2:
raise InvalidCode('Set_variable takes two arguments.') raise InvalidCode('Set_variable takes two arguments.')
varname = args[0] varname = args[0]
if not isinstance(varname, str):
raise InvalidCode('First argument to set_variable must be a string.')
value = self.to_native(args[1]) value = self.to_native(args[1])
self.set_variable(varname, value) self.set_variable(varname, value)
def set_variable(self, varname, variable): def set_variable(self, varname, variable):
if variable is None: if variable is None:
raise InvalidCode('Can not assign None to variable.') raise InvalidCode('Can not assign None to variable.')
if not isinstance(varname, str):
raise InvalidCode('First argument to set_variable must be a string.')
if not self.is_assignable(variable): if not self.is_assignable(variable):
raise InvalidCode('Assigned value not of assignable type.') raise InvalidCode('Assigned value not of assignable type.')
if re.fullmatch('[_a-zA-Z][_0-9a-zA-Z]*', varname) is None:
raise InvalidCode('Invalid variable name: ' + varname)
if varname in self.builtin: if varname in self.builtin:
raise InvalidCode('Tried to overwrite internal variable "%s"' % varname) raise InvalidCode('Tried to overwrite internal variable "%s"' % varname)
self.variables[varname] = variable self.variables[varname] = variable

Loading…
Cancel
Save