113498266Sopenharmony_ci/***************************************************************************
213498266Sopenharmony_ci *                                  _   _ ____  _
313498266Sopenharmony_ci *  Project                     ___| | | |  _ \| |
413498266Sopenharmony_ci *                             / __| | | | |_) | |
513498266Sopenharmony_ci *                            | (__| |_| |  _ <| |___
613498266Sopenharmony_ci *                             \___|\___/|_| \_\_____|
713498266Sopenharmony_ci *
813498266Sopenharmony_ci * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
913498266Sopenharmony_ci *
1013498266Sopenharmony_ci * This software is licensed as described in the file COPYING, which
1113498266Sopenharmony_ci * you should have received as part of this distribution. The terms
1213498266Sopenharmony_ci * are also available at https://curl.se/docs/copyright.html.
1313498266Sopenharmony_ci *
1413498266Sopenharmony_ci * You may opt to use, copy, modify, merge, publish, distribute and/or sell
1513498266Sopenharmony_ci * copies of the Software, and permit persons to whom the Software is
1613498266Sopenharmony_ci * furnished to do so, under the terms of the COPYING file.
1713498266Sopenharmony_ci *
1813498266Sopenharmony_ci * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
1913498266Sopenharmony_ci * KIND, either express or implied.
2013498266Sopenharmony_ci *
2113498266Sopenharmony_ci * SPDX-License-Identifier: curl
2213498266Sopenharmony_ci *
2313498266Sopenharmony_ci ***************************************************************************/
2413498266Sopenharmony_ci#include "curlcheck.h"
2513498266Sopenharmony_ci
2613498266Sopenharmony_ci#include "tool_cfgable.h"
2713498266Sopenharmony_ci#include "tool_doswin.h"
2813498266Sopenharmony_ci
2913498266Sopenharmony_ci#include <stdio.h>
3013498266Sopenharmony_ci#include <stdlib.h>
3113498266Sopenharmony_ci#include <string.h>
3213498266Sopenharmony_ci
3313498266Sopenharmony_ci#include "memdebug.h" /* LAST include file */
3413498266Sopenharmony_ci
3513498266Sopenharmony_cistatic CURLcode unit_setup(void)
3613498266Sopenharmony_ci{
3713498266Sopenharmony_ci  return CURLE_OK;
3813498266Sopenharmony_ci}
3913498266Sopenharmony_ci
4013498266Sopenharmony_cistatic void unit_stop(void)
4113498266Sopenharmony_ci{
4213498266Sopenharmony_ci
4313498266Sopenharmony_ci}
4413498266Sopenharmony_ci
4513498266Sopenharmony_ci#if defined(_WIN32) || defined(MSDOS)
4613498266Sopenharmony_ci
4713498266Sopenharmony_cistatic char *getflagstr(int flags)
4813498266Sopenharmony_ci{
4913498266Sopenharmony_ci  char *buf = malloc(256);
5013498266Sopenharmony_ci  if(buf) {
5113498266Sopenharmony_ci    msnprintf(buf, 256, "%s,%s,%s,%s",
5213498266Sopenharmony_ci              ((flags & SANITIZE_ALLOW_COLONS) ?
5313498266Sopenharmony_ci               "SANITIZE_ALLOW_COLONS" : ""),
5413498266Sopenharmony_ci              ((flags & SANITIZE_ALLOW_PATH) ?
5513498266Sopenharmony_ci               "SANITIZE_ALLOW_PATH" : ""),
5613498266Sopenharmony_ci              ((flags & SANITIZE_ALLOW_RESERVED) ?
5713498266Sopenharmony_ci               "SANITIZE_ALLOW_RESERVED" : ""),
5813498266Sopenharmony_ci              ((flags & SANITIZE_ALLOW_TRUNCATE) ?
5913498266Sopenharmony_ci               "SANITIZE_ALLOW_TRUNCATE" : ""));
6013498266Sopenharmony_ci  }
6113498266Sopenharmony_ci  return buf;
6213498266Sopenharmony_ci}
6313498266Sopenharmony_ci
6413498266Sopenharmony_cistatic char *getcurlcodestr(int cc)
6513498266Sopenharmony_ci{
6613498266Sopenharmony_ci  char *buf = malloc(256);
6713498266Sopenharmony_ci  if(buf) {
6813498266Sopenharmony_ci    msnprintf(buf, 256, "%s (%d)",
6913498266Sopenharmony_ci              (cc == SANITIZE_ERR_OK ? "SANITIZE_ERR_OK" :
7013498266Sopenharmony_ci               cc == SANITIZE_ERR_BAD_ARGUMENT ? "SANITIZE_ERR_BAD_ARGUMENT" :
7113498266Sopenharmony_ci               cc == SANITIZE_ERR_INVALID_PATH ? "SANITIZE_ERR_INVALID_PATH" :
7213498266Sopenharmony_ci               cc == SANITIZE_ERR_OUT_OF_MEMORY ? "SANITIZE_ERR_OUT_OF_MEMORY":
7313498266Sopenharmony_ci               "unexpected error code - add name"),
7413498266Sopenharmony_ci              cc);
7513498266Sopenharmony_ci  }
7613498266Sopenharmony_ci  return buf;
7713498266Sopenharmony_ci}
7813498266Sopenharmony_ci
7913498266Sopenharmony_cistruct data {
8013498266Sopenharmony_ci  const char *input;
8113498266Sopenharmony_ci  int flags;
8213498266Sopenharmony_ci  const char *expected_output;
8313498266Sopenharmony_ci  SANITIZEcode expected_result;
8413498266Sopenharmony_ci};
8513498266Sopenharmony_ci
8613498266Sopenharmony_ciUNITTEST_START
8713498266Sopenharmony_ci{ /* START sanitize_file_name */
8813498266Sopenharmony_ci  struct data data[] = {
8913498266Sopenharmony_ci    { "", 0,
9013498266Sopenharmony_ci      "", SANITIZE_ERR_OK
9113498266Sopenharmony_ci    },
9213498266Sopenharmony_ci    { "normal filename", 0,
9313498266Sopenharmony_ci      "normal filename", SANITIZE_ERR_OK
9413498266Sopenharmony_ci    },
9513498266Sopenharmony_ci    { "control\tchar", 0,
9613498266Sopenharmony_ci      "control_char", SANITIZE_ERR_OK
9713498266Sopenharmony_ci    },
9813498266Sopenharmony_ci    { "banned*char", 0,
9913498266Sopenharmony_ci      "banned_char", SANITIZE_ERR_OK
10013498266Sopenharmony_ci    },
10113498266Sopenharmony_ci    { "f:foo", 0,
10213498266Sopenharmony_ci      "f_foo", SANITIZE_ERR_OK
10313498266Sopenharmony_ci    },
10413498266Sopenharmony_ci    { "f:foo", SANITIZE_ALLOW_COLONS,
10513498266Sopenharmony_ci      "f:foo", SANITIZE_ERR_OK
10613498266Sopenharmony_ci    },
10713498266Sopenharmony_ci    { "f:foo", SANITIZE_ALLOW_PATH,
10813498266Sopenharmony_ci      "f:foo", SANITIZE_ERR_OK
10913498266Sopenharmony_ci    },
11013498266Sopenharmony_ci    { "f:\\foo", 0,
11113498266Sopenharmony_ci      "f__foo", SANITIZE_ERR_OK
11213498266Sopenharmony_ci    },
11313498266Sopenharmony_ci    { "f:\\foo", SANITIZE_ALLOW_PATH,
11413498266Sopenharmony_ci      "f:\\foo", SANITIZE_ERR_OK
11513498266Sopenharmony_ci    },
11613498266Sopenharmony_ci    { "f:/foo", 0,
11713498266Sopenharmony_ci      "f__foo", SANITIZE_ERR_OK
11813498266Sopenharmony_ci    },
11913498266Sopenharmony_ci    { "f:/foo", SANITIZE_ALLOW_PATH,
12013498266Sopenharmony_ci      "f:/foo", SANITIZE_ERR_OK
12113498266Sopenharmony_ci    },
12213498266Sopenharmony_ci#ifndef MSDOS
12313498266Sopenharmony_ci    { "\\\\?\\C:\\foo", SANITIZE_ALLOW_PATH,
12413498266Sopenharmony_ci      "\\\\?\\C:\\foo", SANITIZE_ERR_OK
12513498266Sopenharmony_ci    },
12613498266Sopenharmony_ci    { "\\\\?\\C:\\foo", 0,
12713498266Sopenharmony_ci      "____C__foo", SANITIZE_ERR_OK
12813498266Sopenharmony_ci    },
12913498266Sopenharmony_ci#endif
13013498266Sopenharmony_ci    { "foo:bar", 0,
13113498266Sopenharmony_ci      "foo_bar", SANITIZE_ERR_OK
13213498266Sopenharmony_ci    },
13313498266Sopenharmony_ci    { "foo|<>/bar\\\":?*baz", 0,
13413498266Sopenharmony_ci      "foo____bar_____baz", SANITIZE_ERR_OK
13513498266Sopenharmony_ci    },
13613498266Sopenharmony_ci    { "f:foo::$DATA", 0,
13713498266Sopenharmony_ci      "f_foo__$DATA", SANITIZE_ERR_OK
13813498266Sopenharmony_ci    },
13913498266Sopenharmony_ci    { "con . air", 0,
14013498266Sopenharmony_ci      "con _ air", SANITIZE_ERR_OK
14113498266Sopenharmony_ci    },
14213498266Sopenharmony_ci    { "con.air", 0,
14313498266Sopenharmony_ci      "con_air", SANITIZE_ERR_OK
14413498266Sopenharmony_ci    },
14513498266Sopenharmony_ci    { "con:/x", 0,
14613498266Sopenharmony_ci      "con__x", SANITIZE_ERR_OK
14713498266Sopenharmony_ci    },
14813498266Sopenharmony_ci    { "file . . . .  ..  .", 0,
14913498266Sopenharmony_ci      "file", SANITIZE_ERR_OK
15013498266Sopenharmony_ci    },
15113498266Sopenharmony_ci    { "foo . . ? . . ", 0,
15213498266Sopenharmony_ci      "foo . . _", SANITIZE_ERR_OK
15313498266Sopenharmony_ci    },
15413498266Sopenharmony_ci    { "com1", 0,
15513498266Sopenharmony_ci      "_com1", SANITIZE_ERR_OK
15613498266Sopenharmony_ci    },
15713498266Sopenharmony_ci    { "com1", SANITIZE_ALLOW_RESERVED,
15813498266Sopenharmony_ci      "com1", SANITIZE_ERR_OK
15913498266Sopenharmony_ci    },
16013498266Sopenharmony_ci    { "f:\\com1", 0,
16113498266Sopenharmony_ci      "f__com1", SANITIZE_ERR_OK
16213498266Sopenharmony_ci    },
16313498266Sopenharmony_ci    { "f:\\com1", SANITIZE_ALLOW_PATH,
16413498266Sopenharmony_ci      "f:\\_com1", SANITIZE_ERR_OK
16513498266Sopenharmony_ci    },
16613498266Sopenharmony_ci    { "f:\\com1", SANITIZE_ALLOW_RESERVED,
16713498266Sopenharmony_ci      "f__com1", SANITIZE_ERR_OK
16813498266Sopenharmony_ci    },
16913498266Sopenharmony_ci    { "f:\\com1", SANITIZE_ALLOW_RESERVED | SANITIZE_ALLOW_COLONS,
17013498266Sopenharmony_ci      "f:_com1", SANITIZE_ERR_OK
17113498266Sopenharmony_ci    },
17213498266Sopenharmony_ci    { "f:\\com1", SANITIZE_ALLOW_RESERVED | SANITIZE_ALLOW_PATH,
17313498266Sopenharmony_ci      "f:\\com1", SANITIZE_ERR_OK
17413498266Sopenharmony_ci    },
17513498266Sopenharmony_ci    { "com1:\\com1", SANITIZE_ALLOW_PATH,
17613498266Sopenharmony_ci      "_com1:\\_com1", SANITIZE_ERR_OK
17713498266Sopenharmony_ci    },
17813498266Sopenharmony_ci    { "com1:\\com1", SANITIZE_ALLOW_RESERVED | SANITIZE_ALLOW_PATH,
17913498266Sopenharmony_ci      "com1:\\com1", SANITIZE_ERR_OK
18013498266Sopenharmony_ci    },
18113498266Sopenharmony_ci    { "com1:\\com1", SANITIZE_ALLOW_RESERVED,
18213498266Sopenharmony_ci      "com1__com1", SANITIZE_ERR_OK
18313498266Sopenharmony_ci    },
18413498266Sopenharmony_ci#ifndef MSDOS
18513498266Sopenharmony_ci    { "\\com1", SANITIZE_ALLOW_PATH,
18613498266Sopenharmony_ci      "\\_com1", SANITIZE_ERR_OK
18713498266Sopenharmony_ci    },
18813498266Sopenharmony_ci    { "\\\\com1", SANITIZE_ALLOW_PATH,
18913498266Sopenharmony_ci      "\\\\com1", SANITIZE_ERR_OK
19013498266Sopenharmony_ci    },
19113498266Sopenharmony_ci    { "\\\\?\\C:\\com1", SANITIZE_ALLOW_PATH,
19213498266Sopenharmony_ci      "\\\\?\\C:\\com1", SANITIZE_ERR_OK
19313498266Sopenharmony_ci    },
19413498266Sopenharmony_ci#endif
19513498266Sopenharmony_ci    { "CoM1", 0,
19613498266Sopenharmony_ci      "_CoM1", SANITIZE_ERR_OK
19713498266Sopenharmony_ci    },
19813498266Sopenharmony_ci    { "CoM1", SANITIZE_ALLOW_RESERVED,
19913498266Sopenharmony_ci      "CoM1", SANITIZE_ERR_OK
20013498266Sopenharmony_ci    },
20113498266Sopenharmony_ci    { "COM56", 0,
20213498266Sopenharmony_ci      "COM56", SANITIZE_ERR_OK
20313498266Sopenharmony_ci    },
20413498266Sopenharmony_ci    /* At the moment we expect a maximum path length of 259. I assume MSDOS
20513498266Sopenharmony_ci       has variable max path lengths depending on compiler that are shorter
20613498266Sopenharmony_ci       so currently these "good" truncate tests won't run on MSDOS */
20713498266Sopenharmony_ci#ifndef MSDOS
20813498266Sopenharmony_ci    { "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
20913498266Sopenharmony_ci      "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
21013498266Sopenharmony_ci      "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
21113498266Sopenharmony_ci      "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD"
21213498266Sopenharmony_ci      "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE"
21313498266Sopenharmony_ci      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
21413498266Sopenharmony_ci        SANITIZE_ALLOW_TRUNCATE,
21513498266Sopenharmony_ci      "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
21613498266Sopenharmony_ci      "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
21713498266Sopenharmony_ci      "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
21813498266Sopenharmony_ci      "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD"
21913498266Sopenharmony_ci      "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE"
22013498266Sopenharmony_ci      "FFFFF", SANITIZE_ERR_OK
22113498266Sopenharmony_ci    },
22213498266Sopenharmony_ci    { "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
22313498266Sopenharmony_ci      "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
22413498266Sopenharmony_ci      "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
22513498266Sopenharmony_ci      "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD"
22613498266Sopenharmony_ci      "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE"
22713498266Sopenharmony_ci      "FFF\\FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
22813498266Sopenharmony_ci        SANITIZE_ALLOW_TRUNCATE | SANITIZE_ALLOW_PATH,
22913498266Sopenharmony_ci      "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
23013498266Sopenharmony_ci      "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
23113498266Sopenharmony_ci      "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
23213498266Sopenharmony_ci      "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD"
23313498266Sopenharmony_ci      "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE"
23413498266Sopenharmony_ci      "FFF\\FFFFF", SANITIZE_ERR_OK
23513498266Sopenharmony_ci    },
23613498266Sopenharmony_ci    { "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
23713498266Sopenharmony_ci      "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
23813498266Sopenharmony_ci      "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
23913498266Sopenharmony_ci      "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD"
24013498266Sopenharmony_ci      "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE"
24113498266Sopenharmony_ci      "FFF\\FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
24213498266Sopenharmony_ci        SANITIZE_ALLOW_TRUNCATE,
24313498266Sopenharmony_ci      "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
24413498266Sopenharmony_ci      "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
24513498266Sopenharmony_ci      "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
24613498266Sopenharmony_ci      "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD"
24713498266Sopenharmony_ci      "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE"
24813498266Sopenharmony_ci      "FFF_F", SANITIZE_ERR_OK
24913498266Sopenharmony_ci    },
25013498266Sopenharmony_ci#endif /* !MSDOS */
25113498266Sopenharmony_ci    { "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
25213498266Sopenharmony_ci      "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
25313498266Sopenharmony_ci      "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
25413498266Sopenharmony_ci      "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD"
25513498266Sopenharmony_ci      "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE"
25613498266Sopenharmony_ci      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
25713498266Sopenharmony_ci        0,
25813498266Sopenharmony_ci      NULL, SANITIZE_ERR_INVALID_PATH
25913498266Sopenharmony_ci    },
26013498266Sopenharmony_ci    { "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
26113498266Sopenharmony_ci      "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
26213498266Sopenharmony_ci      "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
26313498266Sopenharmony_ci      "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD"
26413498266Sopenharmony_ci      "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE"
26513498266Sopenharmony_ci      "FFFF\\FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
26613498266Sopenharmony_ci        SANITIZE_ALLOW_TRUNCATE,
26713498266Sopenharmony_ci      NULL, SANITIZE_ERR_INVALID_PATH
26813498266Sopenharmony_ci    },
26913498266Sopenharmony_ci    { "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
27013498266Sopenharmony_ci      "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
27113498266Sopenharmony_ci      "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
27213498266Sopenharmony_ci      "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD"
27313498266Sopenharmony_ci      "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE"
27413498266Sopenharmony_ci      "FFFFFFFFFFFFFFFFFFFFFFFFF\\FFFFFFFFFFFFFFFFFFFFFFFF",
27513498266Sopenharmony_ci        SANITIZE_ALLOW_TRUNCATE | SANITIZE_ALLOW_PATH,
27613498266Sopenharmony_ci      NULL, SANITIZE_ERR_INVALID_PATH
27713498266Sopenharmony_ci    },
27813498266Sopenharmony_ci    { "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
27913498266Sopenharmony_ci      "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
28013498266Sopenharmony_ci      "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
28113498266Sopenharmony_ci      "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD"
28213498266Sopenharmony_ci      "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE"
28313498266Sopenharmony_ci      "FFF\\FFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFF",
28413498266Sopenharmony_ci        SANITIZE_ALLOW_TRUNCATE | SANITIZE_ALLOW_PATH,
28513498266Sopenharmony_ci      NULL, SANITIZE_ERR_INVALID_PATH
28613498266Sopenharmony_ci    },
28713498266Sopenharmony_ci    { "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
28813498266Sopenharmony_ci      "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
28913498266Sopenharmony_ci      "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
29013498266Sopenharmony_ci      "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD"
29113498266Sopenharmony_ci      "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE"
29213498266Sopenharmony_ci      "FF\\F:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
29313498266Sopenharmony_ci        SANITIZE_ALLOW_TRUNCATE | SANITIZE_ALLOW_PATH,
29413498266Sopenharmony_ci      NULL, SANITIZE_ERR_INVALID_PATH
29513498266Sopenharmony_ci    },
29613498266Sopenharmony_ci    { NULL, 0,
29713498266Sopenharmony_ci      NULL, SANITIZE_ERR_BAD_ARGUMENT
29813498266Sopenharmony_ci    },
29913498266Sopenharmony_ci  };
30013498266Sopenharmony_ci
30113498266Sopenharmony_ci  size_t i;
30213498266Sopenharmony_ci
30313498266Sopenharmony_ci  for(i = 0; i < sizeof(data) / sizeof(data[0]); ++i) {
30413498266Sopenharmony_ci    char *output = NULL;
30513498266Sopenharmony_ci    char *flagstr = NULL;
30613498266Sopenharmony_ci    char *received_ccstr = NULL;
30713498266Sopenharmony_ci    char *expected_ccstr = NULL;
30813498266Sopenharmony_ci    SANITIZEcode res;
30913498266Sopenharmony_ci
31013498266Sopenharmony_ci    res = sanitize_file_name(&output, data[i].input, data[i].flags);
31113498266Sopenharmony_ci
31213498266Sopenharmony_ci    if(res == data[i].expected_result &&
31313498266Sopenharmony_ci       ((!output && !data[i].expected_output) ||
31413498266Sopenharmony_ci        (output && data[i].expected_output &&
31513498266Sopenharmony_ci         !strcmp(output, data[i].expected_output)))) { /* OK */
31613498266Sopenharmony_ci      free(output);
31713498266Sopenharmony_ci      continue;
31813498266Sopenharmony_ci    }
31913498266Sopenharmony_ci
32013498266Sopenharmony_ci    flagstr = getflagstr(data[i].flags);
32113498266Sopenharmony_ci    abort_unless(flagstr, "out of memory");
32213498266Sopenharmony_ci    received_ccstr = getcurlcodestr(res);
32313498266Sopenharmony_ci    abort_unless(received_ccstr, "out of memory");
32413498266Sopenharmony_ci    expected_ccstr = getcurlcodestr(data[i].expected_result);
32513498266Sopenharmony_ci    abort_unless(expected_ccstr, "out of memory");
32613498266Sopenharmony_ci
32713498266Sopenharmony_ci    unitfail++;
32813498266Sopenharmony_ci    fprintf(stderr, "\n"
32913498266Sopenharmony_ci            "%s:%d sanitize_file_name failed.\n"
33013498266Sopenharmony_ci            "input: %s\n"
33113498266Sopenharmony_ci            "flags: %s\n"
33213498266Sopenharmony_ci            "output: %s\n"
33313498266Sopenharmony_ci            "result: %s\n"
33413498266Sopenharmony_ci            "expected output: %s\n"
33513498266Sopenharmony_ci            "expected result: %s\n",
33613498266Sopenharmony_ci            __FILE__, __LINE__,
33713498266Sopenharmony_ci            data[i].input,
33813498266Sopenharmony_ci            flagstr,
33913498266Sopenharmony_ci            (output ? output : "(null)"),
34013498266Sopenharmony_ci            received_ccstr,
34113498266Sopenharmony_ci            (data[i].expected_output ? data[i].expected_output : "(null)"),
34213498266Sopenharmony_ci            expected_ccstr);
34313498266Sopenharmony_ci
34413498266Sopenharmony_ci    free(output);
34513498266Sopenharmony_ci    free(flagstr);
34613498266Sopenharmony_ci    free(received_ccstr);
34713498266Sopenharmony_ci    free(expected_ccstr);
34813498266Sopenharmony_ci  }
34913498266Sopenharmony_ci} /* END sanitize_file_name */
35013498266Sopenharmony_ci
35113498266Sopenharmony_ci#else
35213498266Sopenharmony_ciUNITTEST_START
35313498266Sopenharmony_ci{
35413498266Sopenharmony_ci  fprintf(stderr, "Skipped test not for this platform\n");
35513498266Sopenharmony_ci}
35613498266Sopenharmony_ci#endif /* _WIN32 || MSDOS */
35713498266Sopenharmony_ci
35813498266Sopenharmony_ciUNITTEST_STOP
359