]> source.dussan.org Git - rspamd.git/commitdiff
[Minor] Treat EPERM specially
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 12 Feb 2018 20:49:33 +0000 (20:49 +0000)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 12 Feb 2018 20:49:33 +0000 (20:49 +0000)
Issue: #1996

contrib/libucl/ucl_internal.h
contrib/libucl/ucl_util.c

index 44a8fe70e3a93918b927d21fe36f09c120e4fac0..11b71de708ca964768edc511a65e38373deb8cf6 100644 (file)
@@ -321,7 +321,7 @@ ucl_create_err (UT_string **err, const char *fmt, ...)
        }
 
 #ifdef UCL_FATAL_ERRORS
-       assert (0);
+       abort ();
 #endif
 }
 
index f0ce5b5e3cfcf328206fb0d1653a26b0050e3ab5..85b700a4dda9a4ddc3fdab77b3bca4d0ddd8b5ff 100644 (file)
@@ -751,13 +751,20 @@ ucl_fetch_file (const unsigned char *filename, unsigned char **buf, size_t *bufl
        int fd;
        struct stat st;
 
-       if (stat (filename, &st) == -1 || !S_ISREG (st.st_mode)) {
-               if (must_exist) {
+       if (stat (filename, &st) == -1) {
+               if (must_exist || errno == EPERM) {
                        ucl_create_err (err, "cannot stat file %s: %s",
                                        filename, strerror (errno));
                }
                return false;
        }
+       if (!S_ISREG (st.st_mode)) {
+               if (must_exist) {
+                       ucl_create_err (err, "file %s is not a regular file", filename);
+               }
+
+               return false;
+       }
        if (st.st_size == 0) {
                /* Do not map empty files */
                *buf = NULL;
@@ -951,9 +958,10 @@ ucl_include_file_single (const unsigned char *data, size_t len,
                if (params->soft_fail) {
                        return false;
                }
-               if (!params->must_exist) {
+               if (!params->must_exist && errno != EPERM) {
                        return true;
                }
+
                ucl_create_err (&parser->err, "cannot open file %s: %s",
                                                                        filebuf,
                                                                        strerror (errno));
@@ -976,7 +984,12 @@ ucl_include_file_single (const unsigned char *data, size_t len,
                        return false;
                }
 
-               return (!params->must_exist || false);
+               if (params->must_exist || parser->err != NULL) {
+                       /* The case of fatal errors */
+                       return false;
+               }
+
+               return true;
        }
 
        if (params->check_signature) {