crypto/evp/exchange.c:194: error: NULL_DEREFERENCE
  pointer `null` is dereferenced by call to `EVP_KEYEXCH_fetch()` at line 194, column 24.
Showing all 23 steps of the trace


crypto/evp/exchange.c:167:1: start of procedure EVP_PKEY_derive_init_ex()
165.   }
166.   
167. > int EVP_PKEY_derive_init_ex(EVP_PKEY_CTX *ctx, EVP_KEYEXCH *exchange)
168.   {
169.       int ret;

crypto/evp/exchange.c:170:5: 
168.   {
169.       int ret;
170. >     void *provkey = NULL;
171.   
172.       ctx->operation = EVP_PKEY_OP_DERIVE;

crypto/evp/exchange.c:172:5: 
170.       void *provkey = NULL;
171.   
172. >     ctx->operation = EVP_PKEY_OP_DERIVE;
173.   
174.       if (ctx->engine != NULL)

crypto/evp/exchange.c:174:9: Taking false branch
172.       ctx->operation = EVP_PKEY_OP_DERIVE;
173.   
174.       if (ctx->engine != NULL)
               ^
175.           goto legacy;
176.   

crypto/evp/exchange.c:177:9: Taking false branch
175.           goto legacy;
176.   
177.       if (exchange != NULL) {
               ^
178.           if (!EVP_KEYEXCH_up_ref(exchange))
179.               goto err;

crypto/evp/exchange.c:181:19: Condition is true
179.               goto err;
180.       } else {
181.           int nid = ctx->pkey != NULL ? ctx->pkey->type : ctx->pmeth->pkey_id;
                         ^
182.   
183.           /*

crypto/evp/exchange.c:181:9: 
179.               goto err;
180.       } else {
181. >         int nid = ctx->pkey != NULL ? ctx->pkey->type : ctx->pmeth->pkey_id;
182.   
183.           /*

crypto/evp/exchange.c:187:13: Taking true branch
185.            * algorithms are moved to providers.
186.            */
187.           if (ctx->pkey != NULL) {
                   ^
188.               switch (ctx->pkey->type) {
189.               case EVP_PKEY_DH:

crypto/evp/exchange.c:188:13: 
186.            */
187.           if (ctx->pkey != NULL) {
188. >             switch (ctx->pkey->type) {
189.               case EVP_PKEY_DH:
190.                   break;

crypto/evp/exchange.c:189:13: Switch condition is true. Entering switch case
187.           if (ctx->pkey != NULL) {
188.               switch (ctx->pkey->type) {
189.               case EVP_PKEY_DH:
                   ^
190.                   break;
191.               default:

crypto/evp/exchange.c:194:13: 
192.                   goto legacy;
193.               }
194. >             exchange = EVP_KEYEXCH_fetch(NULL, OBJ_nid2sn(nid), NULL);
195.           } else {
196.               goto legacy;

crypto/objects/obj_dat.c:247:1: start of procedure OBJ_nid2sn()
  245.   }
  246.   
  247. > const char *OBJ_nid2sn(int n)
  248.   {
  249.       ADDED_OBJ ad, *adp;

crypto/objects/obj_dat.c:252:10: Taking true branch
  250.       ASN1_OBJECT ob;
  251.   
  252.       if ((n >= 0) && (n < NUM_NID)) {
                  ^
  253.           if ((n != NID_undef) && (nid_objs[n].nid == NID_undef)) {
  254.               OBJerr(OBJ_F_OBJ_NID2SN, OBJ_R_UNKNOWN_NID);

crypto/objects/obj_dat.c:252:22: Taking true branch
  250.       ASN1_OBJECT ob;
  251.   
  252.       if ((n >= 0) && (n < NUM_NID)) {
                              ^
  253.           if ((n != NID_undef) && (nid_objs[n].nid == NID_undef)) {
  254.               OBJerr(OBJ_F_OBJ_NID2SN, OBJ_R_UNKNOWN_NID);

crypto/objects/obj_dat.c:253:14: Taking true branch
  251.   
  252.       if ((n >= 0) && (n < NUM_NID)) {
  253.           if ((n != NID_undef) && (nid_objs[n].nid == NID_undef)) {
                      ^
  254.               OBJerr(OBJ_F_OBJ_NID2SN, OBJ_R_UNKNOWN_NID);
  255.               return NULL;

crypto/objects/obj_dat.c:253:34: Taking true branch
  251.   
  252.       if ((n >= 0) && (n < NUM_NID)) {
  253.           if ((n != NID_undef) && (nid_objs[n].nid == NID_undef)) {
                                          ^
  254.               OBJerr(OBJ_F_OBJ_NID2SN, OBJ_R_UNKNOWN_NID);
  255.               return NULL;

crypto/objects/obj_dat.c:254:13: 
  252.       if ((n >= 0) && (n < NUM_NID)) {
  253.           if ((n != NID_undef) && (nid_objs[n].nid == NID_undef)) {
  254. >             OBJerr(OBJ_F_OBJ_NID2SN, OBJ_R_UNKNOWN_NID);
  255.               return NULL;
  256.           }

providers/fips/fipsprov.c:419:1: start of procedure ERR_put_error()
    417.   }
    418.   
    419. > void ERR_put_error(int lib, int func, int reason, const char *file, int line)
    420.   {
    421.       /*

providers/fips/fipsprov.c:426:5: Skipping __function_pointer__(): unresolved function pointer
    424.        * a OPENSSL_CTX pointer.
    425.        */
    426.       c_put_error(NULL, ERR_PACK(lib, func, reason), file, line);
               ^
    427.       ERR_add_error_data(1, "(in the FIPS module)");
    428.   }

providers/fips/fipsprov.c:427:5: Skipping ERR_add_error_data(): empty list of specs
    425.        */
    426.       c_put_error(NULL, ERR_PACK(lib, func, reason), file, line);
    427.       ERR_add_error_data(1, "(in the FIPS module)");
               ^
    428.   }
    429.   

providers/fips/fipsprov.c:428:1: return from a call to ERR_put_error
    426.       c_put_error(NULL, ERR_PACK(lib, func, reason), file, line);
    427.       ERR_add_error_data(1, "(in the FIPS module)");
    428. > }
    429.   
    430.   void ERR_add_error_data(int num, ...)

crypto/objects/obj_dat.c:255:13: 
  253.           if ((n != NID_undef) && (nid_objs[n].nid == NID_undef)) {
  254.               OBJerr(OBJ_F_OBJ_NID2SN, OBJ_R_UNKNOWN_NID);
  255. >             return NULL;
  256.           }
  257.           return nid_objs[n].sn;

crypto/objects/obj_dat.c:272:1: return from a call to OBJ_nid2sn
  270.           }
  271.       }
  272. > }
  273.   
  274.   const char *OBJ_nid2ln(int n)
