plugin-feature: Hash only the actually used feature argument

Clang does not initialize padding in union members so hashing the
complete "arg" union could lead to different hashes if the hashed
plugin_feature_t does not have static storage duration.

Fixes #549.
This commit is contained in:
Tobias Brunner 2014-03-20 13:42:57 +01:00
parent 0b408faef1
commit 27b3358fed
1 changed files with 31 additions and 1 deletions

View File

@ -73,25 +73,55 @@ u_int32_t plugin_feature_hash(plugin_feature_t *feature)
data = chunk_empty;
break;
case FEATURE_CRYPTER:
data = chunk_from_thing(feature->arg.crypter);
break;
case FEATURE_AEAD:
data = chunk_from_thing(feature->arg.aead);
break;
case FEATURE_SIGNER:
data = chunk_from_thing(feature->arg.signer);
break;
case FEATURE_HASHER:
data = chunk_from_thing(feature->arg.hasher);
break;
case FEATURE_PRF:
data = chunk_from_thing(feature->arg.prf);
break;
case FEATURE_DH:
data = chunk_from_thing(feature->arg.dh_group);
break;
case FEATURE_PRIVKEY:
data = chunk_from_thing(feature->arg.privkey);
break;
case FEATURE_PRIVKEY_GEN:
data = chunk_from_thing(feature->arg.privkey_gen);
break;
case FEATURE_PUBKEY:
data = chunk_from_thing(feature->arg.pubkey);
break;
case FEATURE_PRIVKEY_SIGN:
data = chunk_from_thing(feature->arg.privkey_sign);
break;
case FEATURE_PUBKEY_VERIFY:
data = chunk_from_thing(feature->arg.pubkey_verify);
break;
case FEATURE_PRIVKEY_DECRYPT:
data = chunk_from_thing(feature->arg.privkey_decrypt);
break;
case FEATURE_PUBKEY_ENCRYPT:
data = chunk_from_thing(feature->arg.pubkey_encrypt);
break;
case FEATURE_CERT_DECODE:
case FEATURE_CERT_ENCODE:
data = chunk_from_thing(feature->arg.cert);
break;
case FEATURE_CONTAINER_DECODE:
case FEATURE_CONTAINER_ENCODE:
data = chunk_from_thing(feature->arg.container);
break;
case FEATURE_EAP_SERVER:
case FEATURE_EAP_PEER:
data = chunk_from_thing(feature->arg);
data = chunk_from_thing(feature->arg.eap);
break;
case FEATURE_CUSTOM:
data = chunk_create(feature->arg.custom,