curl/tests/unit/unit2604.c
Daniel Stenberg cd3463d99e
curl_path: make Curl_get_pathname use dynbuf
... instead of malloc and memcpy

- unit test 2604 verifies Curl_get_pathname()

Closes #13550
2024-05-08 10:10:12 +02:00

106 lines
3.4 KiB
C

/***************************************************************************
* _ _ ____ _
* Project ___| | | | _ \| |
* / __| | | | |_) | |
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
* Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
* are also available at https://curl.se/docs/copyright.html.
*
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
* copies of the Software, and permit persons to whom the Software is
* furnished to do so, under the terms of the COPYING file.
*
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
* KIND, either express or implied.
*
* SPDX-License-Identifier: curl
*
***************************************************************************/
#include "curlcheck.h"
#include "curl_path.h"
static CURLcode unit_setup(void)
{
return CURLE_OK;
}
static void unit_stop(void)
{
}
struct set {
const char *cp;
const char *expect; /* the returned content */
const char *next; /* what cp points to after the call */
const char *home;
CURLcode result;
};
UNITTEST_START
#ifdef USE_SSH
{
#define LONG_A "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
#define LONG_AA LONG_A LONG_A LONG_A LONG_A LONG_A LONG_A LONG_A LONG_A LONG_A
#define LONG_AAA LONG_AA LONG_AA LONG_AA LONG_AA LONG_AA LONG_AA LONG_AA
#define LONG_AAAA LONG_AAA LONG_AAA LONG_AAA LONG_AAA LONG_AAA LONG_AAA
#define LONG_AAAAA LONG_AAAA LONG_AAAA LONG_AAAA LONG_AAAA
int i;
int error = 0;
struct set list[] = {
{ LONG_AAAAA " b", "", "", "", CURLE_TOO_LARGE},
{ LONG_AA " c", LONG_AA, "c", "/", CURLE_OK},
{ "\" " LONG_AA "\" c", " " LONG_AA, "c", "/", CURLE_OK},
{ "a a", "a", "a", "/home/", CURLE_OK},
{ "b a", "b", "a", "/", CURLE_OK},
{ "a", "a", "", "/home/", CURLE_OK},
{ "b", "b", "", "/", CURLE_OK},
{ "\"foo bar\"\tb", "foo bar", "b", "/", CURLE_OK},
{ "/~/hej", "/home/user/hej", "", "/home/user", CURLE_OK},
{ "\"foo bar", "", "", "/", CURLE_QUOTE_ERROR},
{ "\"foo\\\"bar\" a", "foo\"bar", "a", "/", CURLE_OK},
{ "\"foo\\\'bar\" b", "foo\'bar", "b", "/", CURLE_OK},
{ "\"foo\\\\bar\" c", "foo\\bar", "c", "/", CURLE_OK},
{ "\"foo\\pbar\" c", "foo\\bar", "", "/", CURLE_QUOTE_ERROR},
{ "\"\" c", "", "", "", CURLE_QUOTE_ERROR},
{ "foo\"", "foo\"", "", "/", CURLE_OK},
{ "foo \"", "foo", "\"", "/", CURLE_OK},
{ NULL, NULL, NULL, NULL, CURLE_OK }
};
for(i = 0; list[i].home; i++) {
char *path;
const char *cp = list[i].cp;
CURLcode result = Curl_get_pathname(&cp, &path, list[i].home);
printf("%u - Curl_get_pathname(\"%s\", ... \"%s\") == %u\n", i,
list[i].cp, list[i].home, list[i].result);
if(result != list[i].result) {
printf("... returned %d\n", result);
error++;
}
if(!result) {
if(cp && strcmp(cp, list[i].next)) {
printf("... cp points to '%s', not '%s' as expected \n",
cp, list[i].next);
error++;
}
if(path && strcmp(path, list[i].expect)) {
printf("... gave '%s', not '%s' as expected \n",
path, list[i].expect);
error++;
}
curl_free(path);
}
}
return error;
}
#endif
UNITTEST_STOP