Feature #20971
openDeprecate `rb_path_check`
Description
With #16131, various code around $SAFE, taint, etc. has been deprecated and removed. GH PR https://github.com/ruby/ruby/pull/2476.
Now, rb_path_check
still exists as part of the public API, with Ruby itself never using or testing it. I believe it should have been deprecated and was simply missed. Should it be deprecated today or is that not worth the effort?
Docs for it are pretty vague: https://github.com/ruby/ruby/blob/33f95d632dce42fac35da29eaed33f0a5a4f0dcb/include/ruby/internal/intern/hash.h#L289-L297
This function is mysterious. What it does is not immediately obvious. Also what it does seems platform dependent.
Updated by nobu (Nobuyoshi Nakada) 2 days ago
I think that rb_path_check
is a separate thing from "object taintedness", and that the removal of path_tainted_p
in env_aset
in despite of it is in !OBJ_TAINTED
side was unintentionally.
@jeremyevans0 (Jeremy Evans) What do you think?
Updated by jeremyevans0 (Jeremy Evans) 2 days ago
From looking at the history, rb_path_check
was originally used by rb_env path_tainted
, presumably to check whether the PATH environment variable was tainted, so as not to trust it. That may be why it is in the hash.h header instead of the file.h header, even though it makes no sense in the hash.h header.
rb_path_check
was used in MJIT, to check for unsafe header files, but that was the last usage I could see in CRuby. I'm guessing that is a reason it may not have been deprecated/removed when $SAFE/taint was deprecated/removed.
If we can do a gem codesearch for rb_path_check
, and nothing important comes up, I am in favor of deprecating and then removing it. I looked through the first 5 pages of GitHub results and nothing of note came up, other than the fact that TruffleRuby does not implement the function.
Updated by nobu (Nobuyoshi Nakada) 2 days ago · Edited
I mean this warning went away since 2.7, which should be unrelated to tainted-ness.
$ ruby2.6 -w -rtmpdir -e 'Dir.mktmpdir("", "/tmp") {|w| File.chmod(0777, w); ENV["PATH"] = w}'
-e:1: warning: Insecure world writable dir /tmp/20241220-14749-10itz6k in PATH, mode 040777
Updated by jeremyevans0 (Jeremy Evans) 2 days ago
nobu (Nobuyoshi Nakada) wrote in #note-3:
I mean this warning went away since 2.7, which should be unrelated to tainted-ness.
I see what you mean. I would be OK with adding that warning back.
Updated by Earlopain (Earlopain _) 2 days ago
Interesting, I thought the removal of that warning was intentional, do other languages have similar warnings? I guess it doesn't matter if it already used to do that 🤷
Updated by nobu (Nobuyoshi Nakada) about 3 hours ago
- Status changed from Open to Assigned
- Assignee set to matz (Yukihiro Matsumoto)
I think it would be OK to remove that warning (and rb_patch_check
etc totally), if it is recognized officially.
@matz (Yukihiro Matsumoto) What do you think?