aboutgitcodebugslistschat
diff options
context:
space:
mode:
authorDavid Gibson <david@gibson.dropbear.id.au>2022-09-28 14:33:30 +1000
committerStefano Brivio <sbrivio@redhat.com>2022-09-29 12:22:28 +0200
commit740ea28f29bb85fafccac81d2c13c2970a0d82b7 (patch)
tree913d0ed20153ef16421b16a99df9857569c4f4a2
parentb35a6cfa0c7dbc92fd54f96072de26c3b687ce82 (diff)
downloadpasst-740ea28f29bb85fafccac81d2c13c2970a0d82b7.tar
passt-740ea28f29bb85fafccac81d2c13c2970a0d82b7.tar.gz
passt-740ea28f29bb85fafccac81d2c13c2970a0d82b7.tar.bz2
passt-740ea28f29bb85fafccac81d2c13c2970a0d82b7.tar.lz
passt-740ea28f29bb85fafccac81d2c13c2970a0d82b7.tar.xz
passt-740ea28f29bb85fafccac81d2c13c2970a0d82b7.tar.zst
passt-740ea28f29bb85fafccac81d2c13c2970a0d82b7.zip
qrap: Handle case of PATH environment variable being unset
clang-tidy warns that in passing getenv("PATH") to strncpy() we could be passing a NULL pointer. While it's unusual for PATH to be unset, it's not impossible and this would indeed cause getenv() to return NULL. Handle this case by never recognizing argv[2] as a qemu binary name if PATH is not set. This is... no flakier than the detection of whether it's a binary name already is. Signed-off-by: David Gibson <david@gibson.dropbear.id.au> Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
-rw-r--r--qrap.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/qrap.c b/qrap.c
index 3138386..a9a0fc1 100644
--- a/qrap.c
+++ b/qrap.c
@@ -173,12 +173,13 @@ int main(int argc, char **argv)
char probe_r;
if (argc >= 3) {
+ const char *path = getenv("PATH");
errno = 0;
fd = strtol(argv[1], NULL, 0);
- if (fd >= 3 && fd < INT_MAX && !errno) {
+ if (fd >= 3 && fd < INT_MAX && !errno && path) {
char env_path[ARG_MAX + 1], *p, command[ARG_MAX];
- strncpy(env_path, getenv("PATH"), ARG_MAX);
+ strncpy(env_path, path, ARG_MAX);
/* cppcheck-suppress strtokCalled */
p = strtok(env_path, ":");
while (p) {