From owner-freebsd-bugs@freebsd.org Wed Dec 26 23:46:40 2018 Return-Path: Delivered-To: freebsd-bugs@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 1403713603F9 for ; Wed, 26 Dec 2018 23:46:40 +0000 (UTC) (envelope-from bugzilla-noreply@freebsd.org) Received: from mailman.ysv.freebsd.org (mailman.ysv.freebsd.org [IPv6:2001:1900:2254:206a::50:5]) by mx1.freebsd.org (Postfix) with ESMTP id 8581672CFD for ; Wed, 26 Dec 2018 23:46:39 +0000 (UTC) (envelope-from bugzilla-noreply@freebsd.org) Received: by mailman.ysv.freebsd.org (Postfix) id 4139613603F7; Wed, 26 Dec 2018 23:46:39 +0000 (UTC) Delivered-To: bugs@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 1C37813603F5 for ; Wed, 26 Dec 2018 23:46:39 +0000 (UTC) (envelope-from bugzilla-noreply@freebsd.org) Received: from mxrelay.ysv.freebsd.org (mxrelay.ysv.freebsd.org [IPv6:2001:1900:2254:206a::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.ysv.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id A5F7A72CE1 for ; Wed, 26 Dec 2018 23:46:38 +0000 (UTC) (envelope-from bugzilla-noreply@freebsd.org) Received: from kenobi.freebsd.org (kenobi.freebsd.org [IPv6:2001:1900:2254:206a::16:76]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.ysv.freebsd.org (Postfix) with ESMTPS id C802B1C4A5 for ; Wed, 26 Dec 2018 23:46:37 +0000 (UTC) (envelope-from bugzilla-noreply@freebsd.org) Received: from kenobi.freebsd.org ([127.0.1.118]) by kenobi.freebsd.org (8.15.2/8.15.2) with ESMTP id wBQNkbOt092081 for ; Wed, 26 Dec 2018 23:46:37 GMT (envelope-from bugzilla-noreply@freebsd.org) Received: (from www@localhost) by kenobi.freebsd.org (8.15.2/8.15.2/Submit) id wBQNkbaT092080 for bugs@FreeBSD.org; Wed, 26 Dec 2018 23:46:37 GMT (envelope-from bugzilla-noreply@freebsd.org) X-Authentication-Warning: kenobi.freebsd.org: www set sender to bugzilla-noreply@freebsd.org using -f From: bugzilla-noreply@freebsd.org To: bugs@FreeBSD.org Subject: [Bug 234430] bc(1) writes error messages to standard output instead of standard error Date: Wed, 26 Dec 2018 23:46:37 +0000 X-Bugzilla-Reason: AssignedTo X-Bugzilla-Type: new X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: Base System X-Bugzilla-Component: bin X-Bugzilla-Version: 12.0-STABLE X-Bugzilla-Keywords: X-Bugzilla-Severity: Affects Some People X-Bugzilla-Who: mcdutchie@hotmail.com X-Bugzilla-Status: New X-Bugzilla-Resolution: X-Bugzilla-Priority: --- X-Bugzilla-Assigned-To: bugs@FreeBSD.org X-Bugzilla-Flags: X-Bugzilla-Changed-Fields: bug_id short_desc product version rep_platform op_sys bug_status bug_severity priority component assigned_to reporter Message-ID: Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Bugzilla-URL: https://bugs.freebsd.org/bugzilla/ Auto-Submitted: auto-generated MIME-Version: 1.0 X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 26 Dec 2018 23:46:40 -0000 https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D234430 Bug ID: 234430 Summary: bc(1) writes error messages to standard output instead of standard error Product: Base System Version: 12.0-STABLE Hardware: Any OS: Any Status: New Severity: Affects Some People Priority: --- Component: bin Assignee: bugs@FreeBSD.org Reporter: mcdutchie@hotmail.com Upon encountering a parsing error, bc(1) passes an error message on to dc(1), which writes the error message to standard output along with the normal output. That is a bug. Error messages should go to standard error instead, as POSIX specifies: http://pubs.opengroup.org/onlinepubs/9699919799/utilities/bc.html#tag_20_09= _10 GNU 'bc', Solaris 'bc', and (as of 2017) OpenBSD 'bc' act like POSIX says a= nd write error messages to standard error. Bizarrely, the exit status of bc(1) is left unspecified: http://pubs.opengroup.org/onlinepubs/9699919799/utilities/bc.html#tag_20_09= _18 And indeed, all versions of 'bc' exit with status 0 if there is an input error such as a parsing error, so the exit status cannot be used to catch it. That leaves examining standard error as the only method for a program calling bc(1), such as a shell script, to distinguish between an error state and normal operation. That is, with this bug, there is no way at all. The following example shell function transparently hardens bc(1) by intercepting standard error and exiting the program or subshell if an error was produced. bc() { _bc_err=3D$(command -p bc "$@" 2>&1 1>&3) [ -z "${_bc_err}" ] && return printf '%s\n' "$0: bc(1) caught errors:" "${_bc_err}" 1>&2 exit 127 } 3>&1 This bug was fixed on OpenBSD 'bc' back in Feburary 2017. I figured FreeBSD would eventually pull in that fix since FreeBSD 'bc' is based on OpenBSD 'b= c', but as of FreeBSD 12.0 that hasn't happened. The OpenBSD patch that fixes the bug is here: https://marc.info/?l=3Dopenbsd-tech&m=3D148767278323276&w=3D2 --=20 You are receiving this mail because: You are the assignee for the bug.=