]> granicus.if.org Git - file/commitdiff
Roman I Khimov:
authorChristos Zoulas <christos@zoulas.com>
Tue, 13 May 2014 16:44:24 +0000 (16:44 +0000)
committerChristos Zoulas <christos@zoulas.com>
Tue, 13 May 2014 16:44:24 +0000 (16:44 +0000)
access() can't handle NULL as first argument and we can end up
calling it this way if inname is NULL in file_or_fd() and fd is a
pipe. Issue spotted by clang static analysis.

src/magic.c

index 862375b41d471f5a9d4b459caa13e319e43923c0..d9c7fe35421f289fb820216c7cfb55081657b5dd 100644 (file)
@@ -33,7 +33,7 @@
 #include "file.h"
 
 #ifndef        lint
-FILE_RCSID("@(#)$File: magic.c,v 1.81 2013/11/29 15:42:51 christos Exp $")
+FILE_RCSID("@(#)$File: magic.c,v 1.82 2014/05/13 16:38:23 christos Exp $")
 #endif /* lint */
 
 #include "magic.h"
@@ -220,13 +220,15 @@ magic_open(int flags)
 private int
 unreadable_info(struct magic_set *ms, mode_t md, const char *file)
 {
-       /* We cannot open it, but we were able to stat it. */
-       if (access(file, W_OK) == 0)
-               if (file_printf(ms, "writable, ") == -1)
-                       return -1;
-       if (access(file, X_OK) == 0)
-               if (file_printf(ms, "executable, ") == -1)
-                       return -1;
+       if (file) {
+               /* We cannot open it, but we were able to stat it. */
+               if (access(file, W_OK) == 0)
+                       if (file_printf(ms, "writable, ") == -1)
+                               return -1;
+               if (access(file, X_OK) == 0)
+                       if (file_printf(ms, "executable, ") == -1)
+                               return -1;
+       }
        if (S_ISREG(md))
                if (file_printf(ms, "regular file, ") == -1)
                        return -1;