Annotation of embedaddon/curl/tests/unit/unit1604.c, revision 1.1
1.1 ! misho 1: /***************************************************************************
! 2: * _ _ ____ _
! 3: * Project ___| | | | _ \| |
! 4: * / __| | | | |_) | |
! 5: * | (__| |_| | _ <| |___
! 6: * \___|\___/|_| \_\_____|
! 7: *
! 8: * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
! 9: *
! 10: * This software is licensed as described in the file COPYING, which
! 11: * you should have received as part of this distribution. The terms
! 12: * are also available at https://curl.haxx.se/docs/copyright.html.
! 13: *
! 14: * You may opt to use, copy, modify, merge, publish, distribute and/or sell
! 15: * copies of the Software, and permit persons to whom the Software is
! 16: * furnished to do so, under the terms of the COPYING file.
! 17: *
! 18: * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
! 19: * KIND, either express or implied.
! 20: *
! 21: ***************************************************************************/
! 22: #include "curlcheck.h"
! 23:
! 24: #include "tool_cfgable.h"
! 25: #include "tool_doswin.h"
! 26:
! 27: #include <stdio.h>
! 28: #include <stdlib.h>
! 29: #include <string.h>
! 30:
! 31: #include "memdebug.h" /* LAST include file */
! 32:
! 33: static CURLcode unit_setup(void)
! 34: {
! 35: return CURLE_OK;
! 36: }
! 37:
! 38: static void unit_stop(void)
! 39: {
! 40:
! 41: }
! 42:
! 43: #if defined(MSDOS) || defined(WIN32)
! 44:
! 45: static char *getflagstr(int flags)
! 46: {
! 47: char *buf = malloc(256);
! 48: if(buf) {
! 49: msnprintf(buf, 256, "%s,%s,%s,%s",
! 50: ((flags & SANITIZE_ALLOW_COLONS) ?
! 51: "SANITIZE_ALLOW_COLONS" : ""),
! 52: ((flags & SANITIZE_ALLOW_PATH) ?
! 53: "SANITIZE_ALLOW_PATH" : ""),
! 54: ((flags & SANITIZE_ALLOW_RESERVED) ?
! 55: "SANITIZE_ALLOW_RESERVED" : ""),
! 56: ((flags & SANITIZE_ALLOW_TRUNCATE) ?
! 57: "SANITIZE_ALLOW_TRUNCATE" : ""));
! 58: }
! 59: return buf;
! 60: }
! 61:
! 62: static char *getcurlcodestr(int cc)
! 63: {
! 64: char *buf = malloc(256);
! 65: if(buf) {
! 66: msnprintf(buf, 256, "%s (%d)",
! 67: (cc == SANITIZE_ERR_OK ? "SANITIZE_ERR_OK" :
! 68: cc == SANITIZE_ERR_BAD_ARGUMENT ? "SANITIZE_ERR_BAD_ARGUMENT" :
! 69: cc == SANITIZE_ERR_INVALID_PATH ? "SANITIZE_ERR_INVALID_PATH" :
! 70: cc == SANITIZE_ERR_OUT_OF_MEMORY ? "SANITIZE_ERR_OUT_OF_MEMORY":
! 71: "unexpected error code - add name"),
! 72: cc);
! 73: }
! 74: return buf;
! 75: }
! 76:
! 77: struct data {
! 78: const char *input;
! 79: int flags;
! 80: const char *expected_output;
! 81: CURLcode expected_result;
! 82: };
! 83:
! 84: UNITTEST_START
! 85:
! 86: { /* START sanitize_file_name */
! 87: struct data data[] = {
! 88: { "", 0,
! 89: "", SANITIZE_ERR_OK
! 90: },
! 91: { "normal filename", 0,
! 92: "normal filename", SANITIZE_ERR_OK
! 93: },
! 94: { "control\tchar", 0,
! 95: "control_char", SANITIZE_ERR_OK
! 96: },
! 97: { "banned*char", 0,
! 98: "banned_char", SANITIZE_ERR_OK
! 99: },
! 100: { "f:foo", 0,
! 101: "f_foo", SANITIZE_ERR_OK
! 102: },
! 103: { "f:foo", SANITIZE_ALLOW_COLONS,
! 104: "f:foo", SANITIZE_ERR_OK
! 105: },
! 106: { "f:foo", SANITIZE_ALLOW_PATH,
! 107: "f:foo", SANITIZE_ERR_OK
! 108: },
! 109: { "f:\\foo", 0,
! 110: "f__foo", SANITIZE_ERR_OK
! 111: },
! 112: { "f:\\foo", SANITIZE_ALLOW_PATH,
! 113: "f:\\foo", SANITIZE_ERR_OK
! 114: },
! 115: { "f:/foo", 0,
! 116: "f__foo", SANITIZE_ERR_OK
! 117: },
! 118: { "f:/foo", SANITIZE_ALLOW_PATH,
! 119: "f:/foo", SANITIZE_ERR_OK
! 120: },
! 121: #ifndef MSDOS
! 122: { "\\\\?\\C:\\foo", SANITIZE_ALLOW_PATH,
! 123: "\\\\?\\C:\\foo", SANITIZE_ERR_OK
! 124: },
! 125: { "\\\\?\\C:\\foo", 0,
! 126: "____C__foo", SANITIZE_ERR_OK
! 127: },
! 128: #endif
! 129: { "foo:bar", 0,
! 130: "foo_bar", SANITIZE_ERR_OK
! 131: },
! 132: { "foo|<>/bar\\\":?*baz", 0,
! 133: "foo____bar_____baz", SANITIZE_ERR_OK
! 134: },
! 135: { "f:foo::$DATA", 0,
! 136: "f_foo__$DATA", SANITIZE_ERR_OK
! 137: },
! 138: { "con . air", 0,
! 139: "con _ air", SANITIZE_ERR_OK
! 140: },
! 141: { "con.air", 0,
! 142: "con_air", SANITIZE_ERR_OK
! 143: },
! 144: { "con:/x", 0,
! 145: "con__x", SANITIZE_ERR_OK
! 146: },
! 147: { "file . . . . .. .", 0,
! 148: "file", SANITIZE_ERR_OK
! 149: },
! 150: { "foo . . ? . . ", 0,
! 151: "foo . . _", SANITIZE_ERR_OK
! 152: },
! 153: { "com1", 0,
! 154: "_com1", SANITIZE_ERR_OK
! 155: },
! 156: { "com1", SANITIZE_ALLOW_RESERVED,
! 157: "com1", SANITIZE_ERR_OK
! 158: },
! 159: { "f:\\com1", 0,
! 160: "f__com1", SANITIZE_ERR_OK
! 161: },
! 162: { "f:\\com1", SANITIZE_ALLOW_PATH,
! 163: "f:\\_com1", SANITIZE_ERR_OK
! 164: },
! 165: { "f:\\com1", SANITIZE_ALLOW_RESERVED,
! 166: "f__com1", SANITIZE_ERR_OK
! 167: },
! 168: { "f:\\com1", SANITIZE_ALLOW_RESERVED | SANITIZE_ALLOW_COLONS,
! 169: "f:_com1", SANITIZE_ERR_OK
! 170: },
! 171: { "f:\\com1", SANITIZE_ALLOW_RESERVED | SANITIZE_ALLOW_PATH,
! 172: "f:\\com1", SANITIZE_ERR_OK
! 173: },
! 174: { "com1:\\com1", SANITIZE_ALLOW_PATH,
! 175: "_com1:\\_com1", SANITIZE_ERR_OK
! 176: },
! 177: { "com1:\\com1", SANITIZE_ALLOW_RESERVED | SANITIZE_ALLOW_PATH,
! 178: "com1:\\com1", SANITIZE_ERR_OK
! 179: },
! 180: { "com1:\\com1", SANITIZE_ALLOW_RESERVED,
! 181: "com1__com1", SANITIZE_ERR_OK
! 182: },
! 183: #ifndef MSDOS
! 184: { "\\com1", SANITIZE_ALLOW_PATH,
! 185: "\\_com1", SANITIZE_ERR_OK
! 186: },
! 187: { "\\\\com1", SANITIZE_ALLOW_PATH,
! 188: "\\\\com1", SANITIZE_ERR_OK
! 189: },
! 190: { "\\\\?\\C:\\com1", SANITIZE_ALLOW_PATH,
! 191: "\\\\?\\C:\\com1", SANITIZE_ERR_OK
! 192: },
! 193: #endif
! 194: { "CoM1", 0,
! 195: "_CoM1", SANITIZE_ERR_OK
! 196: },
! 197: { "CoM1", SANITIZE_ALLOW_RESERVED,
! 198: "CoM1", SANITIZE_ERR_OK
! 199: },
! 200: { "COM56", 0,
! 201: "COM56", SANITIZE_ERR_OK
! 202: },
! 203: /* At the moment we expect a maximum path length of 259. I assume MSDOS
! 204: has variable max path lengths depending on compiler that are shorter
! 205: so currently these "good" truncate tests won't run on MSDOS */
! 206: #ifndef MSDOS
! 207: { "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
! 208: "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
! 209: "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
! 210: "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD"
! 211: "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE"
! 212: "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
! 213: SANITIZE_ALLOW_TRUNCATE,
! 214: "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
! 215: "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
! 216: "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
! 217: "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD"
! 218: "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE"
! 219: "FFFFF", SANITIZE_ERR_OK
! 220: },
! 221: { "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
! 222: "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
! 223: "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
! 224: "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD"
! 225: "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE"
! 226: "FFF\\FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
! 227: SANITIZE_ALLOW_TRUNCATE | SANITIZE_ALLOW_PATH,
! 228: "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
! 229: "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
! 230: "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
! 231: "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD"
! 232: "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE"
! 233: "FFF\\FFFFF", SANITIZE_ERR_OK
! 234: },
! 235: { "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
! 236: "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
! 237: "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
! 238: "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD"
! 239: "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE"
! 240: "FFF\\FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
! 241: SANITIZE_ALLOW_TRUNCATE,
! 242: "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
! 243: "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
! 244: "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
! 245: "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD"
! 246: "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE"
! 247: "FFF_F", SANITIZE_ERR_OK
! 248: },
! 249: #endif /* !MSDOS */
! 250: { "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
! 251: "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
! 252: "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
! 253: "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD"
! 254: "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE"
! 255: "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
! 256: 0,
! 257: NULL, SANITIZE_ERR_INVALID_PATH
! 258: },
! 259: { "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
! 260: "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
! 261: "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
! 262: "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD"
! 263: "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE"
! 264: "FFFF\\FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
! 265: SANITIZE_ALLOW_TRUNCATE,
! 266: NULL, SANITIZE_ERR_INVALID_PATH
! 267: },
! 268: { "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
! 269: "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
! 270: "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
! 271: "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD"
! 272: "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE"
! 273: "FFFFFFFFFFFFFFFFFFFFFFFFF\\FFFFFFFFFFFFFFFFFFFFFFFF",
! 274: SANITIZE_ALLOW_TRUNCATE | SANITIZE_ALLOW_PATH,
! 275: NULL, SANITIZE_ERR_INVALID_PATH
! 276: },
! 277: { "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
! 278: "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
! 279: "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
! 280: "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD"
! 281: "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE"
! 282: "FFF\\FFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFF",
! 283: SANITIZE_ALLOW_TRUNCATE | SANITIZE_ALLOW_PATH,
! 284: NULL, SANITIZE_ERR_INVALID_PATH
! 285: },
! 286: { "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
! 287: "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
! 288: "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
! 289: "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD"
! 290: "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE"
! 291: "FF\\F:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
! 292: SANITIZE_ALLOW_TRUNCATE | SANITIZE_ALLOW_PATH,
! 293: NULL, SANITIZE_ERR_INVALID_PATH
! 294: },
! 295: { NULL, 0,
! 296: NULL, SANITIZE_ERR_BAD_ARGUMENT
! 297: },
! 298: };
! 299:
! 300: size_t i;
! 301:
! 302: for(i = 0; i < sizeof(data) / sizeof(data[0]); ++i) {
! 303: char *output = NULL;
! 304: char *flagstr = NULL;
! 305: char *received_ccstr = NULL;
! 306: char *expected_ccstr = NULL;
! 307:
! 308: CURLcode res = sanitize_file_name(&output, data[i].input, data[i].flags);
! 309:
! 310: if(res == data[i].expected_result &&
! 311: ((!output && !data[i].expected_output) ||
! 312: (output && data[i].expected_output &&
! 313: !strcmp(output, data[i].expected_output)))) { /* OK */
! 314: free(output);
! 315: continue;
! 316: }
! 317:
! 318: flagstr = getflagstr(data[i].flags);
! 319: abort_unless(flagstr, "out of memory");
! 320: received_ccstr = getcurlcodestr(res);
! 321: abort_unless(received_ccstr, "out of memory");
! 322: expected_ccstr = getcurlcodestr(data[i].expected_result);
! 323: abort_unless(expected_ccstr, "out of memory");
! 324:
! 325: unitfail++;
! 326: fprintf(stderr, "\n"
! 327: "%s:%d sanitize_file_name failed.\n"
! 328: "input: %s\n"
! 329: "flags: %s\n"
! 330: "output: %s\n"
! 331: "result: %s\n"
! 332: "expected output: %s\n"
! 333: "expected result: %s\n",
! 334: __FILE__, __LINE__,
! 335: data[i].input,
! 336: flagstr,
! 337: (output ? output : "(null)"),
! 338: received_ccstr,
! 339: (data[i].expected_output ? data[i].expected_output : "(null)"),
! 340: expected_ccstr);
! 341:
! 342: free(output);
! 343: free(flagstr);
! 344: free(received_ccstr);
! 345: free(expected_ccstr);
! 346: }
! 347: } /* END sanitize_file_name */
! 348:
! 349: #else
! 350: UNITTEST_START
! 351:
! 352: {
! 353: fprintf(stderr, "Skipped test not for this platform\n");
! 354: }
! 355: #endif /* MSDOS || WIN32 */
! 356:
! 357: UNITTEST_STOP
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>