Issue #13613 has been updated by sonots (Naotoshi Seo).


I am thinking to apply a patch like:

```
diff --git a/load.c b/load.c
index 75ac4df..a8175ca 100644
--- a/load.c
+++ b/load.c
@@ -708,7 +708,7 @@ rb_f_load(int argc, VALUE *argv)
     path = rb_find_file(fname);
     if (!path) {
        if (!rb_file_load_ok(RSTRING_PTR(fname)))
-           load_failed(orig_fname);
+           rb_load_fail(orig_fname, strerror(errno));
        path = fname;
     }
     rb_load_internal(path, RTEST(wrap));
@@ -1049,7 +1049,7 @@ rb_require_safe(VALUE fname, int safe)
        JUMP_TAG(result);
     }
     if (result < 0) {
-       load_failed(fname);
+       rb_load_fail(fname, strerror(errno));
     }

     return result ? Qtrue : Qfalse;
```

However, it was not sufficient because `require 'foo'` first tries to load `foo.rb`, and if it does not exist or not readable, load `foo.so` next.
So, we get ENOENT in errno although I want to get EACCESS in this situation.

Any advice is welcome.


----------------------------------------
Feature #13613: Prefer that require/require_relative/load to tell us permission error if the target file is unreadable
https://bugs.ruby-lang.org/issues/13613#change-65188

* Author: sonots (Naotoshi Seo)
* Status: Feedback
* Priority: Normal
* Assignee: 
* Target version: 
----------------------------------------
### Background

https://github.com/google/google-api-ruby-client/issues/205

We've ever met a situation that read-permissions of files in released google-api-client gem were lost as:

```
$ ls -l ~/.rbenv/versions/2.1.3/lib/ruby/gems/2.1.0/gems/google-api-client-0.8.3/lib/google
-rw-r----- 1 sonots sonots 27249  March 24 18:32 2015 api_client.rb
```

The error message was

```
in `require': cannot load such file -- api_client.rb (LoadError)
```

At that time, it took 30 minutes for me to find the reason why we get LoadError with the gem because the file exists.
I looked the source codes load.c, and finally I found the reason as it is because of permission with my intuition.

### What I Want

If `require` tells us PermissionError in addition to LoadError, I could figure out the reason soon.
I think the additional information is helpful for finding such issues.





-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>