[openssl-dev] [EXTERNAL] Re: [openssl.org #4473] Compile errors when compiling with C++ compiler

Jeremy Farrell jeremy.farrell at oracle.com
Thu Mar 24 18:28:27 UTC 2016

On 24/03/2016 17:55, Sands, Daniel wrote:
> On Thu, 2016-03-24 at 01:08 -0400, Jeffrey Walton wrote:
>> I see
>> some stuff going on that's not allowed in C++, but its dodgy in C. For
>> example:
>> crypto/asn1/asn_mime.c: In function ‘ASN1_VALUE* SMIME_read_ASN1(BIO*,
>> BIO**, const ASN1_ITEM*)’:
>> crypto/asn1/asn_mime.c:432:53: warning: deprecated conversion from
>> string constant to ‘char*’ [-Wwrite-strings]
>>       if ((hdr = mime_hdr_find(headers, "content-type")) == NULL
>>                                                       ^
>> In the absence of a compensating control to catch these kinds of
>> mistakes, maybe the project should consider a modern C++ compiler as a
>> quality gate.
> Just a note about this particular issue:  It's not unique to C++. 
>  Even the C standard proscribes use of character string constants as 
> char*'s.

That's not correct. In C string literals are static arrays of items of 
type char, so char* is appropriate to access them. They have the added 
ugly restriction that attempting to modify them results in undefined 
behaviour, which does not exactly match their type. They were not 
defined as arrays of const char to be more easily compatible with 
pre-existing library APIs.

> And with the appropriate -W's, even gcc will warn you about such use.

Just in case you're code might be using them to modify the literal.

>  With another -W that I can't be bothered to look up at the moment, it 
> will even warn you that explicit casts from const x to x are taboo, 
> since your constant may be optimized in a way that conflicts with your 
> attempted use.

J. J. Farrell
Not speaking for Oracle

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mta.openssl.org/pipermail/openssl-dev/attachments/20160324/697cea42/attachment-0001.html>

More information about the openssl-dev mailing list