From d3010f86f8bf6b4e1f805bb366d25adbb6bf7c8b Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Sat, 26 Jun 2021 12:16:42 -0700 Subject: base-name: bug with empty string suffix. * stream.c (base_name): We must check for a zero length suffix, otherwise sub(base, zero, neg(length(suff))) produces an empty string. * tests/018/path.tl: Test cases for base-name. --- stream.c | 2 +- tests/018/path.tl | 28 ++++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/stream.c b/stream.c index 9b329bfb..e4670e10 100644 --- a/stream.c +++ b/stream.c @@ -4990,7 +4990,7 @@ val base_name(val path, val suff) val base = mkustring(num_fast(end - rsep)); init_str(base, rsep, self); return if3(!null_or_missing_p(suff) && ends_with(suff, base, nil, nil) && - neql(length(suff), length(base)), + plusp(length(suff)) && neql(length(suff), length(base)), sub(base, zero, neg(length(suff))), base); } diff --git a/tests/018/path.tl b/tests/018/path.tl index bb45d000..16c44d77 100644 --- a/tests/018/path.tl +++ b/tests/018/path.tl @@ -68,3 +68,31 @@ (long-suffix "a.b/c.d.e/f") nil (long-suffix "a.b/c.d.e/f.g.h") ".g.h" (long-suffix "a.b/c.d.e//") nil) + +(mtest + (base-name "") "" + (base-name "/") "/" + (base-name ".") "." + (base-name "./") "." + (base-name "a") "a" + (base-name "a/") "a" + (base-name "/a") "a" + (base-name "/a/") "a" + (base-name "/a/b") "b" + (base-name "/a/b/") "b" + (base-name "/a/b//") "b" + (base-name "/a/b///") "b") + +(mtest + (base-name "" "") "" + (base-name "/" "/") "/" + (base-name "/" "") "/" + (base-name "." ".") "." + (base-name "." "") "." + (base-name "./" "/") "." + (base-name "a" "a") "a" + (base-name "a" "") "a" + (base-name "a.b" ".b") "a" + (base-name "a.b/" ".b") "a" + (base-name "a.b/" ".b/") "a.b" + (base-name "a.b/" "a.b") "a.b") -- cgit v1.2.3