Fix underflow in path_remove_trailing()
This commit is contained in:
parent
8da0342760
commit
6deef0308a
@ -96,7 +96,7 @@ void
|
|||||||
path_remove_trailing(char *path)
|
path_remove_trailing(char *path)
|
||||||
{
|
{
|
||||||
int n = strlen(path);
|
int n = strlen(path);
|
||||||
for (int i = n - 1; path[i] == '/'; i--) {
|
for (int i = n - 1; i >= 0 && path[i] == '/'; i--) {
|
||||||
path[i] = '\0';
|
path[i] = '\0';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -14,3 +14,4 @@ unit_test(stream.c)
|
|||||||
unit_test(thread.c)
|
unit_test(thread.c)
|
||||||
unit_test(value.c)
|
unit_test(value.c)
|
||||||
unit_test(version.c)
|
unit_test(version.c)
|
||||||
|
unit_test(path.c)
|
||||||
|
35
test/unit/path.c
Normal file
35
test/unit/path.c
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
/* Copyright (c) 2023 Barcelona Supercomputing Center (BSC)
|
||||||
|
* SPDX-License-Identifier: GPL-3.0-or-later */
|
||||||
|
|
||||||
|
#include "emu/path.h"
|
||||||
|
#include "common.h"
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_underflow_trailing(void)
|
||||||
|
{
|
||||||
|
char in[] = { 'A', '/', '/', '/', '/', '\0', 'B' };
|
||||||
|
char out[] = { 'A', '/', '\0','\0','\0','\0', 'B' };
|
||||||
|
char *p = in + 2; /* ^here */
|
||||||
|
|
||||||
|
path_remove_trailing(p);
|
||||||
|
|
||||||
|
if (memcmp(in, out, sizeof(in)) != 0) {
|
||||||
|
for (size_t i = 0; i < sizeof(in); i++) {
|
||||||
|
err("i=%3d, in[i]=%02x out[i]=%02x\n", i,
|
||||||
|
(unsigned char) in[i],
|
||||||
|
(unsigned char) out[i]);
|
||||||
|
}
|
||||||
|
die("path mismatch");
|
||||||
|
}
|
||||||
|
|
||||||
|
err("OK\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
main(void)
|
||||||
|
{
|
||||||
|
test_underflow_trailing();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user