php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Request #55835 char* field should be const char* to avoid C++ warning
Submitted: 2011-10-03 07:56 UTC Modified: 2017-11-02 20:58 UTC
Votes:2
Avg. Score:4.0 ± 1.0
Reproduced:2 of 2 (100.0%)
Same Version:2 (100.0%)
Same OS:2 (100.0%)
From: olivier at yakaz dot com Assigned: nikic (profile)
Status: Closed Package: Compile Warning
PHP Version: 5.3.8 OS: All (seen under Linux)
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: olivier at yakaz dot com
New email:
PHP Version: OS:

 

 [2011-10-03 07:56 UTC] olivier at yakaz dot com
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()

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.

Patches

field_constness_cpp_compilation_warning_fix.patch (last revision 2011-10-03 07:57 UTC by olivier at yakaz dot com)

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2017-11-02 20:58 UTC] nikic@php.net
-Status: Open +Status: Closed -Assigned To: +Assigned To: nikic
 [2017-11-02 20:58 UTC] nikic@php.net
Closing this as the fields are const char * as of PHP 7.0.
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Sat Dec 21 17:01:58 2024 UTC