From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 48) id 810B23858D35; Mon, 27 Feb 2023 09:23:46 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 810B23858D35 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1677489826; bh=C6Doplc/LZRfYQeXiafnE+vJmLURsKavYAlt7bvSBRw=; h=From:To:Subject:Date:In-Reply-To:References:From; b=v2itFxs0K85sEOr3WEuzysunqBIQwBEX0XX78o0kk5rOBBDMsJ28AnUbhgQFOEDaZ cEbFmQdfpLL8trzFmd2egjvoBxoOH304ydCLxmMG/+Ntc6coeYbp01pQazFqxyltAp vjm1ZR6n/6ZaieBrsCZbaNo2xW716tN4n+pc+qwI= From: "redi at gcc dot gnu.org" To: gcc-bugs@gcc.gnu.org Subject: [Bug libstdc++/108886] Add basic_string throw logic_error when assigned a nullptr Date: Mon, 27 Feb 2023 09:23:44 +0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: libstdc++ X-Bugzilla-Version: 12.2.0 X-Bugzilla-Keywords: X-Bugzilla-Severity: normal X-Bugzilla-Who: redi at gcc dot gnu.org X-Bugzilla-Status: UNCONFIRMED X-Bugzilla-Resolution: X-Bugzilla-Priority: P3 X-Bugzilla-Assigned-To: unassigned at gcc dot gnu.org X-Bugzilla-Target-Milestone: --- X-Bugzilla-Flags: X-Bugzilla-Changed-Fields: Message-ID: In-Reply-To: References: Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/ Auto-Submitted: auto-generated MIME-Version: 1.0 List-Id: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=3D108886 --- Comment #3 from Jonathan Wakely --- (In reply to Jonny Grant from comment #2) > I was taught to validate parameters at University. Personally I always > follow defensive programming approaches to avoid crashes. So stop passing null to these functions then :-) > So I would check > parameters on all interface methods and operators. I would rely on the > compiler to remove any unnecessary duplicate sanity checks. That doesn't necessarily work when the member functions are separately compiled, as with most std::string member functions. > > What would be the point of _GLIBCXX_DEBUG_PEDASSERT when there's alread= y a > > debug assertion there? Compiling with _GLIBCXX_DEBUG will already abort. >=20 > I don't see a debug assertion for _GLIBCXX_DEBUG_PEDASSERT could you poi= nt > out the file and line number to me please. You already quoted it in your comment 0 above, it's right there in assign(c= onst _CharT*)! basic_string& assign(const _CharT* __s) { __glibcxx_requires_string(__s); > Just compiled with -D_GLIBCXX_DEBUG but I don't get any abort, just the s= ame > SEGV > https://godbolt.org/z/rjYG8Yrnh If you want a PEDASSERT to fire you need to actually request pedantic assertions. https://godbolt.org/z/874x18G1G /opt/compiler-explorer/gcc-trunk-20230227/include/c++/13.0.1/bits/basic_str= ing.h:1645: constexpr std::__cxx11::basic_string<_CharT, _Traits, _Alloc>& std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::assign(const _CharT*) [with _CharT =3D char; _Traits =3D std::char_traits; _Alloc =3D std::allocator]: Assertion '__s !=3D nullptr' failed. I'm not persuaded to change anything here. The performance of string assignments is very important and adding an extra branch and throwing an exception isn't free.=