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

From: Date: Fri, 30 Sep 2011 09:16:55 +0000
Subject: Re: Cast trap with INI entries compiling C++ extension
References: 1 2 3 4 5 6  Groups: php.internals 
Request: Send a blank email to internals+get-55671@lists.php.net to get a copy of this message
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

Attachment: [text/x-patch] field_constness_cpp_compilation_warning_fix.patch
« previous php.internals (#55671) next »