diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2021-06-26 12:16:42 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2021-06-26 12:16:42 -0700 |
commit | d3010f86f8bf6b4e1f805bb366d25adbb6bf7c8b (patch) | |
tree | 88ad198dcce80164ea18b7f849e77d1b7a1ca2a5 | |
parent | 45e1c6531c4187a6273483bbe63bc1f549fd6ff8 (diff) | |
download | txr-d3010f86f8bf6b4e1f805bb366d25adbb6bf7c8b.tar.gz txr-d3010f86f8bf6b4e1f805bb366d25adbb6bf7c8b.tar.bz2 txr-d3010f86f8bf6b4e1f805bb366d25adbb6bf7c8b.zip |
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.
-rw-r--r-- | stream.c | 2 | ||||
-rw-r--r-- | tests/018/path.tl | 28 |
2 files changed, 29 insertions, 1 deletions
@@ -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") |