Hi,

On 07-05-17 14:03, Antonio Quartulli wrote:
> 
>> On 7 May 2017, at 19:56, Antonio Quartulli <a...@unstable.cc> wrote:
>>
>>> On 4 May 2017, at 06:57, David Sommerseth 
>>> <open...@sf.lists.topphemmelig.net> wrote:
>>>
>>> On 03/05/17 22:15, Steffan Karger wrote:
>>>>> +        switch (opt->verify_hash_algo)
>>>>> +        {
>>>>> +        case MD_SHA1:
>>>>> +            ca_hash = x509_get_sha1_fingerprint(cert, &gc);
>>>>> +            break;
>>>>> +
>>>>> +        case MD_SHA256:
>>>>> +            ca_hash = x509_get_sha256_fingerprint(cert, &gc);
>>>>> +            break;
>>>>> +        }
>>>> This switch should have a default: case that fails, otherwise we might
>>>> be reading from uninitialized memory.  And you might want to consider
>>>> initializing ca_hash to "{ 0 }".  (But you still need to default: case,
>>>> otherwise you'll be doing a 0-length memcmp()).
>>>
>>> *grmbl*  I was sure the enumerated type would make the compiler
>>> complain, but I must have mixed this with some C++ stuff I read not too
>>> long ago.  But my stupid test allows assigning an enumerated type to any
>>> invalid value as well.
>>>
>>
>> You are right.
>> The compiler would have complained if you had left out any value from the 
>> enum set.
>> But the enum set is made of those two values only, hence a default case is 
>> not plausible unless you
>> assign verify_hash_algo with a value out of the enum set (but then you 
>> should have a compiler warning
>> on the assignment).
>>
> 
> I forgot: the good point of *not* having a default is that when you will add 
> a new enum value for that
> particular enum type, the compiler will throw warnings for every switch block 
> you have, informing you
> that now they need to be updated. Having a default will leave you with 
> manually check the various
> code spots.

This only holds when compiling with -Wall, which we do not do by default
(because our current code would emit quite some warnings).

If we would fix our code and compile with -Wall -Werror, I'd agree.  But
as long as we don't, I prefer a defensive code style where I can exclude
undefined behaviour just by looking at the code.

-Steffan

Attachment: signature.asc
Description: OpenPGP digital signature

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Openvpn-devel mailing list
Openvpn-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openvpn-devel

Reply via email to