diff options
-rw-r--r-- | lib/fs.c | 2 | ||||
-rw-r--r-- | tests/custom/04_bugs/34_dirname_off_by_one | 16 |
2 files changed, 17 insertions, 1 deletions
@@ -948,7 +948,7 @@ uc_fs_dirname(uc_vm_t *vm, size_t nargs) if (i == 0) return ucv_string_new("/"); - return ucv_string_new_length(s, i); + return ucv_string_new_length(s, i + 1); } static uc_value_t * diff --git a/tests/custom/04_bugs/34_dirname_off_by_one b/tests/custom/04_bugs/34_dirname_off_by_one new file mode 100644 index 0000000..34ef7c7 --- /dev/null +++ b/tests/custom/04_bugs/34_dirname_off_by_one @@ -0,0 +1,16 @@ +Make sure fs.dirname() doesn't truncate the last character of the +returned path. Previously ucv_string_new_length was called with a +length which no longer included the last character (which had just +been tested not to be a '/' or '.' and hence broke the loop at that +point). + +-- Testcase -- +{% + fs = require('fs'); + printf("%s\n", fs.dirname('/etc/config/wireless')); +%} +-- End -- + +-- Expect stdout -- +/etc/config +-- End -- |