The regular expressions matching filenames in the ##include directives and the
internally generated ##newfile directives where only looking for filenames
composed of alpha numeric characters, periods, and dashes. In Unix/Linux, the
rules for what characters can be in a filename are much looser than that. This
change replaces those expressions with ones that look for anything other than
a quote character. Technically quote characters are allowed as well so we
should allow escaping them somehow, but the additional complexity probably
isn't worth it.
return t
def t_NEWFILE(self, t):
- r'^\#\#newfile\s+"[\w/.-]*"'
+ r'^\#\#newfile\s+"[^"]*"'
self.fileNameStack.push((t.value[11:-1], t.lexer.lineno))
t.lexer.lineno = 0
f.close()
# This regular expression matches '##include' directives
- includeRE = re.compile(r'^\s*##include\s+"(?P<filename>[\w/.-]*)".*$',
+ includeRE = re.compile(r'^\s*##include\s+"(?P<filename>[^"]*)".*$',
re.MULTILINE)
def replace_include(self, matchobj, dirname):