Introduce a ndn_sig_verifier_verify_data_r function that accepts a context argument to carry per-validation state, to be used in place of the global variable(s). The calling application is responsible for allocating memory (either statically or dynamically) for the context struct.
Implement ndn_sig_verifier_verify_data as a wrapper of ndn_sig_verifier_verify_data that uses global variable or function-scope static variable as context.
Update the documentation of ndn_sig_verifier_verify_data to note the non-reentrancy limitation.
The function writes into a global variable
m_userdata
. Consequently, if the application invokesndn_sig_verifier_verify_data
with a new Data packet before the previous validation has completed, undefined behavior may occur. https://github.com/named-data-iot/ndn-lite/blob/6d433acd9b32f6116670ca720025490c38a3e2f8/app-support/ndn-sig-verifier.c#L30-L32 https://github.com/named-data-iot/ndn-lite/blob/6d433acd9b32f6116670ca720025490c38a3e2f8/app-support/ndn-sig-verifier.c#L330-L333To solve this issue:
ndn_sig_verifier_verify_data_r
function that accepts a context argument to carry per-validation state, to be used in place of the global variable(s). The calling application is responsible for allocating memory (either statically or dynamically) for the context struct.ndn_sig_verifier_verify_data
as a wrapper ofndn_sig_verifier_verify_data
that uses global variable or function-scope static variable as context.ndn_sig_verifier_verify_data
to note the non-reentrancy limitation.