00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034 #include <sys/types.h>
00035 #include <sys/stat.h>
00036 #include <stdio.h>
00037 #include <stdlib.h>
00038 #include <string.h>
00039 #include <unistd.h>
00040 #include <errno.h>
00041 #include <err.h>
00042
00043 #include "config.h"
00044 #include "test.h"
00045
00046
00047
00048 static
00049 int
00050 badbuf_fstat(struct stat *sb)
00051 {
00052 return fstat(STDIN_FILENO, sb);
00053 }
00054
00055 static
00056 int
00057 badbuf_lstat(struct stat *sb)
00058 {
00059 return lstat("null:", sb);
00060 }
00061
00062 static
00063 int
00064 badbuf_stat(struct stat *sb)
00065 {
00066 return stat("null:", sb);
00067 }
00068
00069 static
00070 void
00071 common_badbuf(int (*statfunc)(struct stat *), void *ptr,
00072 const char *call, const char *ptrdesc)
00073 {
00074 int rv;
00075 char mydesc[128];
00076
00077 snprintf(mydesc, sizeof(mydesc), "%s with %s buf", call, ptrdesc);
00078 rv = statfunc(ptr);
00079 report_test(rv, errno, EFAULT, mydesc);
00080 }
00081
00082 static
00083 void
00084 any_badbuf(int (*statfunc)(struct stat *), const char *call)
00085 {
00086 common_badbuf(statfunc, NULL, call, "NULL");
00087 common_badbuf(statfunc, INVAL_PTR, call, "invalid pointer");
00088 common_badbuf(statfunc, KERN_PTR, call, "kernel pointer");
00089 }
00090
00091
00092
00093 static
00094 void
00095 any_empty(int (*statfunc)(const char *, struct stat *), const char *call)
00096 {
00097 struct stat sb;
00098 char desc[128];
00099 int rv;
00100
00101 snprintf(desc, sizeof(desc), "%s on empty string", call);
00102 rv = statfunc("", &sb);
00103 report_test2(rv, errno, 0, EINVAL, desc);
00104 }
00105
00106
00107
00108 void
00109 test_fstat(void)
00110 {
00111 test_fstat_fd();
00112 any_badbuf(badbuf_fstat, "fstat");
00113 }
00114
00115 void
00116 test_lstat(void)
00117 {
00118 test_lstat_path();
00119 any_empty(lstat, "stat");
00120 any_badbuf(badbuf_lstat, "lstat");
00121 }
00122
00123 void
00124 test_stat(void)
00125 {
00126 test_stat_path();
00127 any_empty(stat, "stat");
00128 any_badbuf(badbuf_stat, "stat");
00129 }
00130