test-path-utils: fix normalize_path_copy output buffer size
The normalize_path_copy function needs an output buffer that is at least as long as its input (it may shrink the path, but never expand it). However, this test program feeds it static PATH_MAX-sized buffers, which have no relation to the input size. In the normalize_ceiling_entry case, we do at least check the size against PATH_MAX and die(), but that case is even more convoluted. We normalize into a fixed-size buffer, free the original, and then replace it with a strdup'd copy of the result. But normalize_path_copy explicitly allows normalizing in-place, so we can simply do that. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
5545f057d4
commit
62f17513e7
@ -8,21 +8,14 @@
|
||||
*/
|
||||
static int normalize_ceiling_entry(struct string_list_item *item, void *unused)
|
||||
{
|
||||
const char *ceil = item->string;
|
||||
int len = strlen(ceil);
|
||||
char buf[PATH_MAX+1];
|
||||
char *ceil = item->string;
|
||||
|
||||
if (len == 0)
|
||||
if (!*ceil)
|
||||
die("Empty path is not supported");
|
||||
if (len > PATH_MAX)
|
||||
die("Path \"%s\" is too long", ceil);
|
||||
if (!is_absolute_path(ceil))
|
||||
die("Path \"%s\" is not absolute", ceil);
|
||||
if (normalize_path_copy(buf, ceil) < 0)
|
||||
if (normalize_path_copy(ceil, ceil) < 0)
|
||||
die("Path \"%s\" could not be normalized", ceil);
|
||||
len = strlen(buf);
|
||||
free(item->string);
|
||||
item->string = xstrdup(buf);
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -166,7 +159,7 @@ static struct test_data dirname_data[] = {
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
if (argc == 3 && !strcmp(argv[1], "normalize_path_copy")) {
|
||||
char *buf = xmalloc(PATH_MAX + 1);
|
||||
char *buf = xmallocz(strlen(argv[2]));
|
||||
int rv = normalize_path_copy(buf, argv[2]);
|
||||
if (rv)
|
||||
buf = "++failed++";
|
||||
|
Loading…
Reference in New Issue
Block a user