From nobody Sat Feb 05 21:40:14 2022 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id C99C419A63A4; Sat, 5 Feb 2022 21:40:14 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4Jrm665LYVz3Gy2; Sat, 5 Feb 2022 21:40:14 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1644097214; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=0rGg0E0YB+SS+gv0bWFK+l/uHbx0qayeOFEuiWAjA2M=; b=gHM7DAa4/Ee1MIWdeHltdM0u70PNo8IjxZtcmcUJnS2DKH/309+xGtmC2Lw1HKebhc6tzS C+6LDhu6k2/mYRjAf+79Z+AQe0gWPZjpA69WmOGIqhUdQepq/dJjzocGkbqz7JHE1tZpct RdHajaLxA8RrvyoDtOf1WGIZPvrM7Pr1qD8ijETART45cJy3FyAR3dmyhhdSc2cqHViNok Oy3Fr/kXT+sfkf07kY2upSVQVt4QKpKx0VkeIklMw4QZEb0cgOpzN3N9anoZFldpvWFdPj vBTidJLURF48H7mrbxkDvnbVyfMVRgnWaZTsZ/lC4dfP0lc9EZrMS/29itTLrQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 9785426AB3; Sat, 5 Feb 2022 21:40:14 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 215LeE9V060604; Sat, 5 Feb 2022 21:40:14 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 215LeEC7060597; Sat, 5 Feb 2022 21:40:14 GMT (envelope-from git) Date: Sat, 5 Feb 2022 21:40:14 GMT Message-Id: <202202052140.215LeEC7060597@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: =?utf-8?Q?Stefan E=C3=9Fer?= Subject: git: 00698711dee1 - main - vendor/bc: import release 5.2.2 List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-main@freebsd.org X-BeenThere: dev-commits-src-main@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: se X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 00698711dee1d990d3db9c41bf58394e589eecfe Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1644097214; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=0rGg0E0YB+SS+gv0bWFK+l/uHbx0qayeOFEuiWAjA2M=; b=WmjL6PXlvLx+b+xK4AYYcUP2HE4LlGmiSlYNk2OkjSw5YV9/LEnj+Tql7ZgBb0NX3dahjs RU32lIaxsu5IlG3C57oQku43pbITvgWYhTTyTfgQzzF+pButgR/qdubAlu0yZz44yUHdVI DBjCju4NI71DQnzgyivk2106ozfvUryU7fXUIwga/HWe4N2knkVFR7pad5Cnk+cnfbrEQv n2dWGHtL5kWt09P/BzFcwYTd8bIYiLLQlatwUMgqqIuaKXqPq3LUNpkdwgXvUia3bSH7zV 8uhdFMuAvPotwhdQZY7tkR1GTtSbZYrGT0sgbh7joBE6dowXrhaZ2Le2IpnZWQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1644097214; a=rsa-sha256; cv=none; b=jT5+gAiKopt5wIWORStJmTllvQGTY9NT0rbkjbIcIPNM/+xWjpgdjhPF4sN/AZr3R5RsZv gNxLy2NiUa5bbyDwf/ElgPHbgnH4Gb3a6MObehasNXoLj7ZJ/L1qWViugT7cd2oNixDLYr KSQVNjxy6DYQwKjSC42pH8d1CA1usUGdM3L2fqgV3AtFvhxHcie2/SJg+97ZUhO6S0nvKz raGRmP+bT4HkDOAGoxA1S10rXgQnNZ7qH98geMaM5PNBBPv9CKSbKQ9JqOcayumNz2UNMd GPE7hYfQhz2K60Y/G4mM3EqLPn2Wi3NlSAhGzXgU+COgZZ8JKSj+s90PBgPJTw== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by se: URL: https://cgit.FreeBSD.org/src/commit/?id=00698711dee1d990d3db9c41bf58394e589eecfe commit 00698711dee1d990d3db9c41bf58394e589eecfe Author: Stefan Eßer AuthorDate: 2022-02-05 21:26:36 +0000 Commit: Stefan Eßer CommitDate: 2022-02-05 21:39:59 +0000 vendor/bc: import release 5.2.2 This release assigns a default value to the internal program name variable in case the program is invoked with argv[0] == NULL. There was no security issue: the prevuous program version would have been immediately terminated due to a NULL dereference. --- contrib/bc/NEWS.md | 8 ++++++++ contrib/bc/configure.sh | 6 +++--- contrib/bc/include/lang.h | 8 ++++++++ contrib/bc/include/version.h | 2 +- contrib/bc/include/vm.h | 2 ++ contrib/bc/src/main.c | 28 ++++++++++++++++++++++++---- contrib/bc/src/program.c | 1 - 7 files changed, 46 insertions(+), 9 deletions(-) diff --git a/contrib/bc/NEWS.md b/contrib/bc/NEWS.md index 5d0126b821a8..9a354e537d9f 100644 --- a/contrib/bc/NEWS.md +++ b/contrib/bc/NEWS.md @@ -1,5 +1,13 @@ # News +## 5.2.2 + +This is a production release that fixes one bug, a segmentation fault if +`argv[0]` equals `NULL`. + +This is not a critical bug; there will be no vulnerability as far as I can tell. +There is no need to update if you do not wish to. + ## 5.2.1 This is a production release that fixes two parse bugs when in POSIX standard diff --git a/contrib/bc/configure.sh b/contrib/bc/configure.sh index 76ffb2b9a18e..fc66ffc51066 100755 --- a/contrib/bc/configure.sh +++ b/contrib/bc/configure.sh @@ -36,7 +36,7 @@ builddir=$(pwd) . "$scriptdir/scripts/functions.sh" # Simply prints the help message and quits based on the argument. -# @param val The value to pass to exit. Must be an integer. +# @param msg The help message to print. usage() { if [ $# -gt 0 ]; then @@ -95,7 +95,7 @@ usage() { printf ' -f, --force\n' printf ' Force use of all enabled options, even if they do not work. This\n' printf ' option is to allow the maintainer a way to test that certain options\n' - printf ' are not failing invisibly. (Development only.)' + printf ' are not failing invisibly. (Development only.)\n' printf ' -g, --debug\n' printf ' Build in debug mode. Adds the "-g" flag, and if there are no\n' printf ' other CFLAGS, and "-O" was not given, this also adds the "-O0"\n' @@ -535,7 +535,7 @@ gen_std_test_targets() { # This allows `make test_bc_errors` and `make test_dc_errors` to run in # parallel. # -# @param name Which calculator to generate tests for. +# @param name Which calculator to generate tests for. gen_err_tests() { _gen_err_tests_name="$1" diff --git a/contrib/bc/include/lang.h b/contrib/bc/include/lang.h index 705aca35df1c..09b0d6072806 100644 --- a/contrib/bc/include/lang.h +++ b/contrib/bc/include/lang.h @@ -37,6 +37,9 @@ #define BC_LANG_H #include +#if BC_C11 +#include +#endif // BC_C11 #include #include @@ -324,6 +327,11 @@ typedef enum BcInst { } BcInst; +#if BC_C11 +static_assert(BC_INST_INVALID <= UCHAR_MAX, + "Too many instructions to fit into an unsigned char"); +#endif // BC_C11 + /// Used by maps to identify where items are in the array. typedef struct BcId { diff --git a/contrib/bc/include/version.h b/contrib/bc/include/version.h index eca73baf508f..0c4122528e7d 100644 --- a/contrib/bc/include/version.h +++ b/contrib/bc/include/version.h @@ -37,6 +37,6 @@ #define BC_VERSION_H /// The current version. -#define VERSION 5.2.1 +#define VERSION 5.2.2 #endif // BC_VERSION_H diff --git a/contrib/bc/include/vm.h b/contrib/bc/include/vm.h index d6f698fb1e6d..6f69712a804b 100644 --- a/contrib/bc/include/vm.h +++ b/contrib/bc/include/vm.h @@ -545,8 +545,10 @@ typedef struct BcVm { /// The messages for each error. const char *err_msgs[BC_ERR_NELEMS]; +#if BC_ENABLE_NLS /// The locale. const char *locale; +#endif // BC_ENABLE_NLS #endif // !BC_ENABLE_LIBRARY diff --git a/contrib/bc/src/main.c b/contrib/bc/src/main.c index 38c87a415f2b..3146f983787e 100644 --- a/contrib/bc/src/main.c +++ b/contrib/bc/src/main.c @@ -37,7 +37,9 @@ #include #include +#if BC_ENABLE_NLS #include +#endif // BC_ENABLE_NLS #ifndef _WIN32 #include @@ -56,16 +58,34 @@ int main(int argc, char *argv[]) { char *name; size_t len = strlen(BC_EXECPREFIX); +#if BC_ENABLE_NLS // Must set the locale properly in order to have the right error messages. vm.locale = setlocale(LC_ALL, ""); +#endif // BC_ENABLE_NLS // Set the start pledge(). bc_pledge(bc_pledge_start, NULL); - // Figure out the name of the calculator we are using. We can't use basename - // because it's not portable, but yes, this is stripping off the directory. - name = strrchr(argv[0], BC_FILE_SEP); - vm.name = (name == NULL) ? argv[0] : name + 1; + // Sometimes, argv[0] can be NULL. Better make sure to be robust against it. + if (argv[0] != NULL) { + + // Figure out the name of the calculator we are using. We can't use + // basename because it's not portable, but yes, this is stripping off + // the directory. + name = strrchr(argv[0], BC_FILE_SEP); + vm.name = (name == NULL) ? argv[0] : name + 1; + } + else + { +#if !DC_ENABLED + vm.name = "bc"; +#elif !BC_ENABLED + vm.name = "dc"; +#else + // Just default to bc in that case. + vm.name = "bc"; +#endif + } // If the name is longer than the length of the prefix, skip the prefix. if (strlen(vm.name) > len) vm.name += len; diff --git a/contrib/bc/src/program.c b/contrib/bc/src/program.c index bc5b88011638..8ec1a011a26d 100644 --- a/contrib/bc/src/program.c +++ b/contrib/bc/src/program.c @@ -2718,7 +2718,6 @@ void bc_program_exec(BcProgram *p) { while (ip->idx < func->code.len) #endif // !BC_HAS_COMPUTED_GOTO { - BC_SIG_ASSERT_NOT_LOCKED; #if BC_HAS_COMPUTED_GOTO