Re: Cast trap with INI entries compiling C++ extension

From: Date: Mon, 03 Oct 2011 08:01:45 +0000
Subject: Re: Cast trap with INI entries compiling C++ extension
References: 1 2 3 4 5 6 7  Groups: php.internals 
Request: Send a blank email to internals+get-55690@lists.php.net to get a copy of this message
I finally managed to submit the patch... I used iceweasel 6.0.2 instead of Google Chrome 14.0.835.186... or maybe the captcha was just in a better mood! The link to the bug report: https://bugs.php.net/bug.php?id=55835 Yours, -- Olivier Favre Software engineer Yakaz www.yakaz.com 2011/9/30 Olivier Favre <olivier@yakaz.com> > > I keep on having the following error: >    ERROR: >    ⋅ Incorrect Captcha > while trying to file a bug on the following page: >    https://bugs.php.net/report.php > (Debian sid, Google Chrome 14.0.835.186) > > I tried flushing my cookies. > There are two opened bug reports about that: >  - https://bugs.php.net/bug.php?id=54380 >  - https://bugs.php.net/bug.php?id=53255 > And I would have liked to file another... if only I could! > > > Anyway, if someone else is luckier, here what I'd have liked to file: > > PHP version: 5.3.8 > Package affected: Compile issues/Compilation warning > Bug type: Feature/Change request > OS: All (seen under Linux) > Summary: char* field should be const char* to avoid C++ warning > Description: > http://news.php.net/php.internals/55662 > > I'm writing a C++ extension to PHP. > When declaring a INI entry I get the following warning, multiple times: > warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings] > > This only arises when compiling with a C++ compiler. > The right and easy fix seems to set some fields to const char *. > Some may even be set to const char * const (but this alternative seems > to be used > nowhere). > > The proposed patch is against the php5-dev-5.3.8-2 package of debian sid: > PHP 5.3.8-2 with Suhosin-Patch (cli) (built: Sep 12 2011 07:28:26) > - - - > Test script: > Write a C++ extension: > config.m4 should contain PHP_REQUIRE_CXX(). > > Declare your module: > zend_module_entry quezako_module_entry = { >    STANDARD_MODULE_HEADER, >    "YourExtensionName", // (1 warning here) >    [...], >    "0.42", // (1 warning here) >    [...], >    STANDARD_MODULE_PROPERTIES_EX > }; > > Declare an INI entry: > PHP_INI_BEGIN() > STD_PHP_INI_ENTRY( >    "extensionName.variable", // (1 warning here) >    "default value", // (1 warning here) >    [...] > ) > PHP_INI_END() > - - - > Patch name: field_constness_cpp_compilation_warning_fix.patch > Patch file: (see attached file) > Expected result: > No compilation warning. > - - - > Actual result: > Multiple of the following warning: > warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings] > > Using the very common fix of prepending (char*) to the string constant is > especially harmful here, because of ZEND_INI_ENTRY3_EX using sizeof() on in: it > returns 4/8 (32/64bits platform). > Using a cast to char[] solves the problem, but the above fix is a very very > common mistake. > > If the target fields were const char*, no compilation warning would be rose. > - - - > Solve the problem 17 + 23 = ?: 40 (I even checked the answer using a > calculator!!!!) > Submit: Send bug report (I'm going mad, really...) > > -- > Olivier Favre > Software engineer > Yakaz > www.yakaz.com

« previous php.internals (#55690) next »