diff options
author | Nick Mathewson <nickm@torproject.org> | 2017-09-25 11:08:11 -0400 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2017-09-26 12:24:04 -0400 |
commit | eb54a856a298aff8b2cdadf87247a33a74921c49 (patch) | |
tree | cfd297e78927fe247341d3eafdb6c71e97b59058 /src/or/shared_random_state.c | |
parent | 90e8d1f58fb77eb15c59c1bd846aabe1555b64f2 (diff) | |
download | tor-eb54a856a298aff8b2cdadf87247a33a74921c49.tar.gz tor-eb54a856a298aff8b2cdadf87247a33a74921c49.zip |
Add test to make sure all confparse variables are well-typed
New approach, suggested by Taylor: During testing builds, we
initialize a union member of an appropriate pointer type with the
address of the member field we're trying to test, so we can make
sure that the compiler doesn't warn.
My earlier approach invoked undefined behavior.
Diffstat (limited to 'src/or/shared_random_state.c')
-rw-r--r-- | src/or/shared_random_state.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/src/or/shared_random_state.c b/src/or/shared_random_state.c index 13ef95bb0c..f74cb70a18 100644 --- a/src/or/shared_random_state.c +++ b/src/or/shared_random_state.c @@ -40,10 +40,14 @@ static const char dstate_commit_key[] = "Commit"; static const char dstate_prev_srv_key[] = "SharedRandPreviousValue"; static const char dstate_cur_srv_key[] = "SharedRandCurrentValue"; +/** dummy instance of sr_disk_state_t, used for type-checking its + * members with CONF_CHECK_VAR_TYPE. */ +DUMMY_TYPECHECK_INSTANCE(sr_disk_state_t); + /* These next two are duplicates or near-duplicates from config.c */ #define VAR(name, conftype, member, initvalue) \ { name, CONFIG_TYPE_ ## conftype, offsetof(sr_disk_state_t, member), \ - initvalue } + initvalue CONF_TEST_MEMBERS(sr_disk_state_t, conftype, member) } /* As VAR, but the option name and member name are the same. */ #define V(member, conftype, initvalue) \ VAR(#member, conftype, member, initvalue) @@ -70,7 +74,7 @@ static config_var_t state_vars[] = { V(SharedRandValues, LINELIST_V, NULL), VAR("SharedRandPreviousValue",LINELIST_S, SharedRandValues, NULL), VAR("SharedRandCurrentValue", LINELIST_S, SharedRandValues, NULL), - { NULL, CONFIG_TYPE_OBSOLETE, 0, NULL } + END_OF_CONFIG_VARS }; /* "Extra" variable in the state that receives lines we can't parse. This @@ -78,6 +82,7 @@ static config_var_t state_vars[] = { static config_var_t state_extra_var = { "__extra", CONFIG_TYPE_LINELIST, offsetof(sr_disk_state_t, ExtraLines), NULL + CONF_TEST_MEMBERS(sr_disk_state_t, LINELIST, ExtraLines) }; /* Configuration format of sr_disk_state_t. */ |