43 #if defined(MSDOS) || defined(WIN32) 45 static char *getflagstr(
int flags)
50 ((flags & SANITIZE_ALLOW_COLONS) ?
"SANITIZE_ALLOW_COLONS" :
""),
51 ((flags & SANITIZE_ALLOW_PATH) ?
"SANITIZE_ALLOW_PATH" :
""),
52 ((flags & SANITIZE_ALLOW_RESERVED) ?
"SANITIZE_ALLOW_RESERVED" :
""),
53 ((flags & SANITIZE_ALLOW_TRUNCATE) ?
"SANITIZE_ALLOW_TRUNCATE" :
""));
58 static char *getcurlcodestr(
int cc)
63 (cc == SANITIZE_ERR_OK ?
"SANITIZE_ERR_OK" :
64 cc == SANITIZE_ERR_BAD_ARGUMENT ?
"SANITIZE_ERR_BAD_ARGUMENT" :
65 cc == SANITIZE_ERR_INVALID_PATH ?
"SANITIZE_ERR_INVALID_PATH" :
66 cc == SANITIZE_ERR_OUT_OF_MEMORY ?
"SANITIZE_ERR_OUT_OF_MEMORY" :
67 "unexpected error code - add name"),
76 const char *expected_output;
83 struct data data[] = {
87 {
"normal filename", 0,
88 "normal filename", SANITIZE_ERR_OK
91 "control_char", SANITIZE_ERR_OK
94 "banned_char", SANITIZE_ERR_OK
97 "f_foo", SANITIZE_ERR_OK
99 {
"f:foo", SANITIZE_ALLOW_COLONS,
100 "f:foo", SANITIZE_ERR_OK
102 {
"f:foo", SANITIZE_ALLOW_PATH,
103 "f:foo", SANITIZE_ERR_OK
106 "f__foo", SANITIZE_ERR_OK
108 {
"f:\\foo", SANITIZE_ALLOW_PATH,
109 "f:\\foo", SANITIZE_ERR_OK
112 "f__foo", SANITIZE_ERR_OK
114 {
"f:/foo", SANITIZE_ALLOW_PATH,
115 "f:/foo", SANITIZE_ERR_OK
118 {
"\\\\?\\C:\\foo", SANITIZE_ALLOW_PATH,
119 "\\\\?\\C:\\foo", SANITIZE_ERR_OK
121 {
"\\\\?\\C:\\foo", 0,
122 "____C__foo", SANITIZE_ERR_OK
126 "foo_bar", SANITIZE_ERR_OK
128 {
"foo|<>/bar\\\":?*baz", 0,
129 "foo____bar_____baz", SANITIZE_ERR_OK
132 "f_foo__$DATA", SANITIZE_ERR_OK
135 "con _ air", SANITIZE_ERR_OK
138 "con_air", SANITIZE_ERR_OK
141 "con__x", SANITIZE_ERR_OK
143 {
"file . . . . .. .", 0,
144 "file", SANITIZE_ERR_OK
146 {
"foo . . ? . . ", 0,
147 "foo . . _", SANITIZE_ERR_OK
150 "_com1", SANITIZE_ERR_OK
152 {
"com1", SANITIZE_ALLOW_RESERVED,
153 "com1", SANITIZE_ERR_OK
156 "f__com1", SANITIZE_ERR_OK
158 {
"f:\\com1", SANITIZE_ALLOW_PATH,
159 "f:\\_com1", SANITIZE_ERR_OK
161 {
"f:\\com1", SANITIZE_ALLOW_RESERVED,
162 "f__com1", SANITIZE_ERR_OK
164 {
"f:\\com1", SANITIZE_ALLOW_RESERVED | SANITIZE_ALLOW_COLONS,
165 "f:_com1", SANITIZE_ERR_OK
167 {
"f:\\com1", SANITIZE_ALLOW_RESERVED | SANITIZE_ALLOW_PATH,
168 "f:\\com1", SANITIZE_ERR_OK
170 {
"com1:\\com1", SANITIZE_ALLOW_PATH,
171 "_com1:\\_com1", SANITIZE_ERR_OK
173 {
"com1:\\com1", SANITIZE_ALLOW_RESERVED | SANITIZE_ALLOW_PATH,
174 "com1:\\com1", SANITIZE_ERR_OK
176 {
"com1:\\com1", SANITIZE_ALLOW_RESERVED,
177 "com1__com1", SANITIZE_ERR_OK
180 {
"\\com1", SANITIZE_ALLOW_PATH,
181 "\\_com1", SANITIZE_ERR_OK
183 {
"\\\\com1", SANITIZE_ALLOW_PATH,
184 "\\\\com1", SANITIZE_ERR_OK
186 {
"\\\\?\\C:\\com1", SANITIZE_ALLOW_PATH,
187 "\\\\?\\C:\\com1", SANITIZE_ERR_OK
191 "_CoM1", SANITIZE_ERR_OK
193 {
"CoM1", SANITIZE_ALLOW_RESERVED,
194 "CoM1", SANITIZE_ERR_OK
197 "COM56", SANITIZE_ERR_OK
203 {
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" 204 "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB" 205 "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC" 206 "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD" 207 "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE" 208 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
209 SANITIZE_ALLOW_TRUNCATE,
210 "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" 211 "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB" 212 "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC" 213 "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD" 214 "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE" 215 "FFFFF", SANITIZE_ERR_OK
217 {
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" 218 "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB" 219 "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC" 220 "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD" 221 "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE" 222 "FFF\\FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
223 SANITIZE_ALLOW_TRUNCATE | SANITIZE_ALLOW_PATH,
224 "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" 225 "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB" 226 "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC" 227 "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD" 228 "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE" 229 "FFF\\FFFFF", SANITIZE_ERR_OK
231 {
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" 232 "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB" 233 "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC" 234 "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD" 235 "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE" 236 "FFF\\FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
237 SANITIZE_ALLOW_TRUNCATE,
238 "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" 239 "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB" 240 "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC" 241 "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD" 242 "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE" 243 "FFF_F", SANITIZE_ERR_OK
246 {
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" 247 "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB" 248 "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC" 249 "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD" 250 "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE" 251 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
253 NULL, SANITIZE_ERR_INVALID_PATH
255 {
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" 256 "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB" 257 "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC" 258 "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD" 259 "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE" 260 "FFFF\\FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
261 SANITIZE_ALLOW_TRUNCATE,
262 NULL, SANITIZE_ERR_INVALID_PATH
264 {
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" 265 "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB" 266 "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC" 267 "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD" 268 "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE" 269 "FFFFFFFFFFFFFFFFFFFFFFFFF\\FFFFFFFFFFFFFFFFFFFFFFFF",
270 SANITIZE_ALLOW_TRUNCATE | SANITIZE_ALLOW_PATH,
271 NULL, SANITIZE_ERR_INVALID_PATH
273 {
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" 274 "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB" 275 "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC" 276 "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD" 277 "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE" 278 "FFF\\FFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFF",
279 SANITIZE_ALLOW_TRUNCATE | SANITIZE_ALLOW_PATH,
280 NULL, SANITIZE_ERR_INVALID_PATH
282 {
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" 283 "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB" 284 "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC" 285 "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD" 286 "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE" 287 "FF\\F:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
288 SANITIZE_ALLOW_TRUNCATE | SANITIZE_ALLOW_PATH,
289 NULL, SANITIZE_ERR_INVALID_PATH
292 NULL, SANITIZE_ERR_BAD_ARGUMENT
298 for(i = 0; i <
sizeof data /
sizeof data[0]; ++
i) {
300 char *flagstr = NULL;
301 char *received_ccstr = NULL;
302 char *expected_ccstr = NULL;
306 if(res == data[i].expected_result &&
307 ((!output && !data[i].expected_output) ||
308 (output && data[i].expected_output &&
309 !strcmp(output, data[i].expected_output)))) {
314 flagstr = getflagstr(data[i].flags);
316 received_ccstr = getcurlcodestr(res);
318 expected_ccstr = getcurlcodestr(data[i].expected_result);
323 "%s:%d sanitize_file_name failed.\n" 328 "expected output: %s\n" 329 "expected result: %s\n",
333 (output ? output :
"(null)"),
335 (data[i].expected_output ? data[i].expected_output :
"(null)"),
340 free(received_ccstr);
341 free(expected_ccstr);
349 fprintf(stderr,
"Skipped test not for this platform\n");
#define abort_unless(expr, msg)
static void unit_stop(void)
UNITTEST_START char * output
static CURLcode unit_setup(void)