Return-Path: Delivered-To: apmail-stdcxx-commits-archive@www.apache.org Received: (qmail 77222 invoked from network); 7 Mar 2008 16:22:38 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 7 Mar 2008 16:22:38 -0000 Received: (qmail 99498 invoked by uid 500); 7 Mar 2008 16:22:35 -0000 Delivered-To: apmail-stdcxx-commits-archive@stdcxx.apache.org Received: (qmail 99479 invoked by uid 500); 7 Mar 2008 16:22:35 -0000 Mailing-List: contact commits-help@stdcxx.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@stdcxx.apache.org Delivered-To: mailing list commits@stdcxx.apache.org Received: (qmail 99470 invoked by uid 99); 7 Mar 2008 16:22:35 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 07 Mar 2008 08:22:35 -0800 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.3] (HELO eris.apache.org) (140.211.11.3) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 07 Mar 2008 16:22:07 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id B3C1C1A9832; Fri, 7 Mar 2008 08:22:17 -0800 (PST) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r634731 - in /stdcxx/trunk/etc/config/src: NEW_OFLOW_SAFE.cpp NEW_THROWS.cpp Date: Fri, 07 Mar 2008 16:22:16 -0000 To: commits@stdcxx.apache.org From: faridz@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20080307162217.B3C1C1A9832@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: faridz Date: Fri Mar 7 08:22:15 2008 New Revision: 634731 URL: http://svn.apache.org/viewvc?rev=634731&view=rev Log: 2008-03-07 Farid Zaripov * etc/config/src/NEW_THROWS.cpp: Split test to two independent tests: NEW_THROWS and NEW_OFLOW_SAFE to prevent _RWSTD_NO_NEW_THROWS #defined when operator new() throws exception, but check for overflow is failed with Access Violation (as on the Borland Turbo C++). * etc/config/src/NEW_OFLOW_SAFE.cpp: New config test to check if operator new() checks the argument for overflow. Added: stdcxx/trunk/etc/config/src/NEW_OFLOW_SAFE.cpp (with props) Modified: stdcxx/trunk/etc/config/src/NEW_THROWS.cpp Added: stdcxx/trunk/etc/config/src/NEW_OFLOW_SAFE.cpp URL: http://svn.apache.org/viewvc/stdcxx/trunk/etc/config/src/NEW_OFLOW_SAFE.cpp?rev=634731&view=auto ============================================================================== --- stdcxx/trunk/etc/config/src/NEW_OFLOW_SAFE.cpp (added) +++ stdcxx/trunk/etc/config/src/NEW_OFLOW_SAFE.cpp Fri Mar 7 08:22:15 2008 @@ -0,0 +1,54 @@ +// checking if operator new() checks the argument for overflow + +/*************************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the License); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. See the License for the specific language governing + * permissions and limitations under the License. + * + * Copyright 1999-2007 Rogue Wave Software, Inc. + * + **************************************************************************/ + +#include "config.h" +#include "nodbg.h" + +#if 2 == __GNUG__ +# ifndef _RWSTD_NO_HONOR_STD +# ifdef _RWSTD_NO_STD_TERMINATE +# include "terminate.h" +# endif // _RWSTD_NO_STD_TERMINATE +# endif // _RWSTD_NO_HONOR_STD +#endif // gcc 2.x + + +// 18.4.1.1 +// -3- Required behavior: Return a non-null pointer ... or else throw +// a bad_alloc exception. + +int main () +{ + nodbg (); + + try { + void* p = ::operator new (size_t (-1)); + } + catch (...) { + // exit successfully if new threw + return 0; + } + + return 1; +} Propchange: stdcxx/trunk/etc/config/src/NEW_OFLOW_SAFE.cpp ------------------------------------------------------------------------------ svn:eol-style = native Propchange: stdcxx/trunk/etc/config/src/NEW_OFLOW_SAFE.cpp ------------------------------------------------------------------------------ svn:keywords = Id Modified: stdcxx/trunk/etc/config/src/NEW_THROWS.cpp URL: http://svn.apache.org/viewvc/stdcxx/trunk/etc/config/src/NEW_THROWS.cpp?rev=634731&r1=634730&r2=634731&view=diff ============================================================================== --- stdcxx/trunk/etc/config/src/NEW_THROWS.cpp (original) +++ stdcxx/trunk/etc/config/src/NEW_THROWS.cpp Fri Mar 7 08:22:15 2008 @@ -23,8 +23,7 @@ **************************************************************************/ #include "config.h" - -#include +#include "nodbg.h" #ifndef _RWSTD_NO_SETRLIMIT // test for setrlimit() presence before compiling current file @@ -41,25 +40,9 @@ # endif // _RWSTD_NO_HONOR_STD #endif // gcc 2.x - -#if (defined (_WIN32) || defined (_WIN64)) && !defined (__CYGWIN__) - -# include // for _CrtSetReportMode() - -void nodbg () -{ - // prevent the Microsoft C library from popping up GUI windows - // on various failures and direct error messages to the console - // instead - _CrtSetReportMode (_CRT_WARN, _CRTDBG_MODE_DEBUG); - _CrtSetReportMode (_CRT_ERROR, _CRTDBG_MODE_DEBUG); - _CrtSetReportMode (_CRT_ASSERT, _CRTDBG_MODE_DEBUG); -} -#else - -void nodbg () { } - -#endif // _WIN32 || _WIN64 && !__CYGWIN__ +#ifndef _RWSTD_NO_NEW_OFLOW_SAFE +// test if operator new() checks the argument for overflow +#endif // _RWSTD_NO_NEW_OFLOW_SAFE // 18.4.1.1 @@ -70,31 +53,11 @@ { nodbg (); - void *p = 0; - - try { - p = ::operator new (size_t (-1)); - } - catch (...) { - // exit successfully if new threw - - // this may give a false positive if operaor new() - // fails to throw for arguments other than -1 as - // happens to be the case with gcc 2.x - printf ("// #define _RWSTD_NO_NEW_OFLOW_SAFE\n"); - return 0; - } - - // otherwise note that operator new() may have not checked - // its argument for overflow and try to coerce it to throw - // by passing it a smaller argument - printf ("#define _RWSTD_NO_NEW_OFLOW_SAFE\n"); - // decrease resource limit to a minimum to induce a failure // without unreasonably stressing the system limit_memory (0); - p = (void*)1; + void *p = (void*)1; try { const size_t size = (size_t)1 << (sizeof (size_t) * 8 - 1);