summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2026-05-02 16:13:52 +0900
committerNobuyoshi Nakada <nobu.nakada@gmail.com>2026-05-13 17:37:48 +0900
commitded98a40dc1bde5bfc3d582da9b40172fa66b61b (patch)
tree75f4a8bf9f419469dfecf8295c4a8ce0d4ae629c
parentb0b7a943e84e6bede60ebaec74c838ccb3cb6b7f (diff)
pathname: Check for path encoding and NUL terminators
-rw-r--r--file.c9
-rw-r--r--internal/file.h1
-rw-r--r--pathname.c1
3 files changed, 10 insertions, 1 deletions
diff --git a/file.c b/file.c
index 53a1ac0934..db29642ac2 100644
--- a/file.c
+++ b/file.c
@@ -245,13 +245,20 @@ VALUE
rb_get_path_check_convert(VALUE obj)
{
obj = file_path_convert(obj);
+ rb_get_path_check_no_convert(obj);
+ return rb_str_new_frozen(obj);
+}
+/* TODO: name */
+VALUE
+rb_get_path_check_no_convert(VALUE obj)
+{
check_path_encoding(obj);
if (!rb_str_to_cstr(obj)) {
rb_raise(rb_eArgError, "path name contains null byte");
}
- return rb_str_new_frozen(obj);
+ return obj;
}
VALUE
diff --git a/internal/file.h b/internal/file.h
index 9c192ff4d1..29e9cdf4b9 100644
--- a/internal/file.h
+++ b/internal/file.h
@@ -23,6 +23,7 @@ VALUE rb_file_expand_path_fast(VALUE, VALUE);
VALUE rb_file_expand_path_internal(VALUE, VALUE, int, int, VALUE);
VALUE rb_get_path_check_to_string(VALUE);
VALUE rb_get_path_check_convert(VALUE);
+VALUE rb_get_path_check_no_convert(VALUE);
int ruby_is_fd_loadable(int fd);
RUBY_SYMBOL_EXPORT_BEGIN
diff --git a/pathname.c b/pathname.c
index 5f12d13767..28e25512a1 100644
--- a/pathname.c
+++ b/pathname.c
@@ -11,6 +11,7 @@ get_strpath(VALUE obj)
strpath = rb_ivar_get(obj, id_at_path);
if (!RB_TYPE_P(strpath, T_STRING))
rb_raise(rb_eTypeError, "unexpected @path");
+ rb_get_path_check_no_convert(strpath);
return strpath;
}