# HG changeset patch # User Adam Chlipala # Date 1292511545 18000 # Node ID 0a2b630f2463e4d523838148c7196525eb86de6e # Parent 78fe9841c39ddd373d0d27350f03ce44c0b21fd9 Enforce character constraints on source filenames diff -r 78fe9841c39d -r 0a2b630f2463 src/compiler.sml --- a/src/compiler.sml Wed Dec 15 09:42:35 2010 -0500 +++ b/src/compiler.sml Thu Dec 16 09:59:05 2010 -0500 @@ -794,7 +794,19 @@ val anyErrors = ref false fun checkErrors () = anyErrors := (!anyErrors orelse ErrorMsg.anyErrors ()) - fun nameOf fname = capitalize (OS.Path.file fname) + fun nameOf fname = + let + val fname = OS.Path.file fname + val fst = if size fname = 0 then #"!" else String.sub (fname, 0) + in + if not (Char.isAlpha fst) then + ErrorMsg.error ("Filename doesn't start with letter: " ^ fname) + else if CharVector.exists (fn ch => not (Char.isAlphaNum ch) andalso ch <> #"_") fname then + ErrorMsg.error ("Filename contains a character that isn't alphanumeric or underscore: " ^ fname) + else + (); + capitalize fname + end fun parseFfi fname = let