diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2016-11-08 21:33:48 -0800 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2016-11-08 21:33:48 -0800 |
commit | a14217b8a4e507a7f75ccc8aa587a44ef0df2414 (patch) | |
tree | 6960487068891a9caa4582e291d4895b7489a2d9 | |
parent | 847a7b6c5292bd2126303e3ab7a6916657e13a71 (diff) | |
download | txr-a14217b8a4e507a7f75ccc8aa587a44ef0df2414.tar.gz txr-a14217b8a4e507a7f75ccc8aa587a44ef0df2414.tar.bz2 txr-a14217b8a4e507a7f75ccc8aa587a44ef0df2414.zip |
Check that name is stringp in some sym functions.
* lib.c (make_sym, make_package, intern): Check
that the name argument is a string.
-rw-r--r-- | lib.c | 24 |
1 files changed, 18 insertions, 6 deletions
@@ -4752,12 +4752,16 @@ val symbol_package(val sym) val make_sym(val name) { - val obj = make_obj(); - obj->s.type = SYM; - obj->s.name = name; - obj->s.package = nil; - obj->s.slot_cache = 0; - return obj; + if (t && !stringp(name)) { + uw_throwf(error_s, lit("make-sym: name ~s isn't a string"), name, nao); + } else { + val obj = make_obj(); + obj->s.type = SYM; + obj->s.name = name; + obj->s.package = nil; + obj->s.slot_cache = 0; + return obj; + } } val gensym(val prefix) @@ -4773,6 +4777,11 @@ val make_package(val name) { if (find_package(name)) { uw_throwf(error_s, lit("make-package: ~s exists already"), name, nao); + } else if (t && !stringp(name)) { + uw_throwf(error_s, lit("make-package: name ~s isn't a string"), name, nao); + } else if (length(name) == zero) { + uw_throwf(error_s, lit("make-package: package name can't be empty string"), + nao); } else { val obj = make_obj(); obj->pk.type = PKG; @@ -4831,6 +4840,9 @@ val intern(val str, val package) val new_p; loc place; + if (!stringp(str)) + uw_throwf(error_s, lit("intern: name ~s isn't a string"), str, nao); + if (null_or_missing_p(package)) { package = cur_package; } else if (stringp(package)) { |