Annotation of embedaddon/curl/tests/unit/unit1395.c, revision 1.1.1.1
1.1 misho 1: /***************************************************************************
2: * _ _ ____ _
3: * Project ___| | | | _ \| |
4: * / __| | | | |_) | |
5: * | (__| |_| | _ <| |___
6: * \___|\___/|_| \_\_____|
7: *
8: * Copyright (C) 1998 - 2020, 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 "dotdot.h"
25:
26: #include "memdebug.h"
27:
28: static CURLcode unit_setup(void)
29: {
30: return CURLE_OK;
31: }
32:
33: static void unit_stop(void)
34: {
35:
36: }
37:
38: struct dotdot {
39: const char *input;
40: const char *output;
41: };
42:
43: UNITTEST_START
44:
45: unsigned int i;
46: int fails = 0;
47: const struct dotdot pairs[] = {
48: { "/a/b/c/./../../g", "/a/g" },
49: { "mid/content=5/../6", "mid/6" },
50: { "/hello/../moo", "/moo" },
51: { "/1/../1", "/1" },
52: { "/1/./1", "/1/1" },
53: { "/1/..", "/" },
54: { "/1/.", "/1/" },
55: { "/1/./..", "/" },
56: { "/1/./../2", "/2" },
57: { "/hello/1/./../2", "/hello/2" },
58: { "test/this", "test/this" },
59: { "test/this/../now", "test/now" },
60: { "/1../moo../foo", "/1../moo../foo"},
61: { "/../../moo", "/moo"},
62: { "/../../moo?andnot/../yay", "/moo?andnot/../yay"},
63: { "/123?foo=/./&bar=/../", "/123?foo=/./&bar=/../"},
64: { "/../moo/..?what", "/?what" },
65: { "/", "/" },
66: { "", "" },
67: { "/.../", "/.../" },
68: { "./moo", "moo" },
69: { "../moo", "moo" },
70: { "/.", "/" },
71: { "/..", "/" },
72: { "/moo/..", "/" },
73: { "..", "" },
74: { ".", "" },
75: };
76:
77: for(i = 0; i < sizeof(pairs)/sizeof(pairs[0]); i++) {
78: char *out = Curl_dedotdotify(pairs[i].input);
79: abort_unless(out != NULL, "returned NULL!");
80:
81: if(strcmp(out, pairs[i].output)) {
82: fprintf(stderr, "Test %u: '%s' gave '%s' instead of '%s'\n",
83: i, pairs[i].input, out, pairs[i].output);
84: fail("Test case output mismatched");
85: fails++;
86: }
87: else
88: fprintf(stderr, "Test %u: OK\n", i);
89: free(out);
90: }
91:
92: fail_if(fails, "output mismatched");
93:
94: UNITTEST_STOP
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>