diff options
-rw-r--r-- | gnu/local.mk | 1 | ||||
-rw-r--r-- | gnu/packages/check.scm | 40 | ||||
-rw-r--r-- | gnu/packages/patches/atf-execute-with-shell.patch | 39 |
3 files changed, 79 insertions, 1 deletions
diff --git a/gnu/local.mk b/gnu/local.mk index f5d9061548..962eaa7ff6 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -963,6 +963,7 @@ dist_patch_DATA = \ %D%/packages/patches/asli-use-system-libs.patch \ %D%/packages/patches/aspell-CVE-2019-25051.patch \ %D%/packages/patches/aspell-default-dict-dir.patch \ + %D%/packages/patches/atf-execute-with-shell.patch \ %D%/packages/patches/ath9k-htc-firmware-binutils.patch \ %D%/packages/patches/ath9k-htc-firmware-gcc.patch \ %D%/packages/patches/ath9k-htc-firmware-gcc-compat.patch \ diff --git a/gnu/packages/check.scm b/gnu/packages/check.scm index a2256fdcf8..ac3a2d9a20 100644 --- a/gnu/packages/check.scm +++ b/gnu/packages/check.scm @@ -35,7 +35,7 @@ ;;; Copyright © 2020 Josh Marshall <joshua.r.marshall.1991@gmail.com> ;;; Copyright © 2020 Vinicius Monego <monego@posteo.net> ;;; Copyright © 2020 Tanguy Le Carrour <tanguy@bioneland.org> -;;; Copyright © 2020, 2021, 2022, 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com> +;;; Copyright © 2020, 2021, 2022, 2023, 2024 Maxim Cournoyer <maxim.cournoyer@gmail.com> ;;; Copyright © 2021 Hugo Lecomte <hugo.lecomte@inria.fr> ;;; Copyright © 2022 Maxime Devos <maximedevos@telenet.be> ;;; Copyright © 2022, 2023 David Elsing <david.elsing@posteo.net> @@ -123,6 +123,44 @@ #:use-module (ice-9 match) #:use-module (srfi srfi-1)) +(define-public atf + (package + (name "atf") + (version "0.21") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/freebsd/atf") + (commit (string-append name "-" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0jwzz6g9jdi5f8v10y0wf3hq73vxyv5qqhkh832ddsj36gn8rlcz")) + (patches (search-patches "atf-execute-with-shell.patch")))) + (build-system gnu-build-system) + (arguments + (list #:configure-flags + #~(list (string-append "ATF_SHELL=" + #$(this-package-input "bash-minimal") + "/bin/sh")))) + (native-inputs (list autoconf automake libtool)) + (inputs (list bash-minimal)) + (home-page "https://github.com/freebsd/atf") + (synopsis "C/C++ Automated Testing Framework libraries") + (description "ATF, or Automated Testing Framework, is a collection of +libraries to write test programs in C, C++ and POSIX shell. + +The ATF libraries offer a simple API. The API is orthogonal through the +various bindings, allowing developers to quickly learn how to write test +programs in different languages. + +ATF-based test programs offer a consistent end-user command-line interface to +allow both humans and automation to run the tests. + +ATF-based test programs rely on an execution engine to be run and this +execution engine is not shipped with ATF. Kyua is the engine of choice.") + (license (list license:bsd-2 license:bsd-3)))) + (define-public pict (package (name "pict") diff --git a/gnu/packages/patches/atf-execute-with-shell.patch b/gnu/packages/patches/atf-execute-with-shell.patch new file mode 100644 index 0000000000..bde4fb336a --- /dev/null +++ b/gnu/packages/patches/atf-execute-with-shell.patch @@ -0,0 +1,39 @@ +Submitted here: https://github.com/freebsd/atf/pull/57 + +From 098b66269b1cf1d944b8b214ceb7ce9febde3682 Mon Sep 17 00:00:00 2001 +From: Maxim Cournoyer <maxim.cournoyer@gmail.com> +Date: Mon, 29 Jan 2024 22:35:49 -0500 +Subject: [PATCH] Fix use after free in execute_with_shell. + +The temporary string returned by atf::env::get would be used outside +its statement, which is invalid and cause undefined behavior. Copy it +to a local variable to avoid the issue. + +Fixes: https://github.com/freebsd/atf/issues/26 +Fixes: https://github.com/freebsd/kyua/issues/223 + +Reported-by: Ruslan Bukin <br@bsdpad.com> +--- + atf-sh/atf-check.cpp | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/atf-sh/atf-check.cpp b/atf-sh/atf-check.cpp +index 41f0b13..9d6f7a8 100644 +--- a/atf-sh/atf-check.cpp ++++ b/atf-sh/atf-check.cpp +@@ -436,7 +436,9 @@ execute_with_shell(char* const* argv) + const std::string cmd = flatten_argv(argv); + + const char* sh_argv[4]; +- sh_argv[0] = atf::env::get("ATF_SHELL", ATF_SHELL).c_str(); ++ const std::string shell = atf::env::get("ATF_SHELL", ATF_SHELL); ++ ++ sh_argv[0] = shell.c_str(); + sh_argv[1] = "-c"; + sh_argv[2] = cmd.c_str(); + sh_argv[3] = NULL; + +base-commit: 18eb8168b70a0f934b4824b6391b55ac0b2f4fdf +-- +2.41.0 + |