From 96bb428fb9d47b332f5c2e979af76e8c2ee75d0e Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Fri, 24 Feb 2012 15:01:11 -0800 Subject: * match.c (v_load): Sanity checking on target path. Check if it is absolute and do not substitute parent file's directory. --- ChangeLog | 6 ++++++ match.c | 12 ++++++++++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 009b8fa5..2796376d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2012-02-24 Kaz Kylheku + + * match.c (v_load): Sanity checking on target path. + Check if it is absolute and do not substitute parent + file's directory. + 2012-02-24 Kaz Kylheku * match.c (h_var): Eliminated uses of rl function, in favor of diff --git a/match.c b/match.c index 5f6e6ecc..5691511d 100644 --- a/match.c +++ b/match.c @@ -3375,10 +3375,18 @@ static val v_load(match_files_ctx *c) if (rest(specline)) sem_error(specline, lit("unexpected material after load"), nao); + if (!stringp(target)) + sem_error(specline, lit("load: path ~s is not a string"), target, nao); + + if (equal(target, null_string)) + sem_error(specline, lit("load: null string path given"), nao); + { - val path = cat_str(nappend2(sub_list(split_str(parent, lit("/")), + val path = if3(chr_str(target, zero) == chr('/'), + target, + cat_str(nappend2(sub_list(split_str(parent, lit("/")), zero, negone), - cons(target, nil)), lit("/")); + cons(target, nil)), lit("/"))); int gc = gc_state(0); parse_reset(path); yyparse(); -- cgit v1.2.3