crypto/dsa/dsa_lib.c:290: error: NULL_DEREFERENCE
  pointer `ret` last assigned on line 266 could be null and is dereferenced by call to `DH_free()` at line 290, column 5.
Showing all 10 steps of the trace


crypto/dsa/dsa_lib.c:255:1: start of procedure DSA_dup_DH()
253.   
254.   #ifndef OPENSSL_NO_DH
255. > DH *DSA_dup_DH(const DSA *r)
256.   {
257.       /*

crypto/dsa/dsa_lib.c:262:5: 
260.        */
261.   
262. >     DH *ret = NULL;
263.   
264.       if (r == NULL)

crypto/dsa/dsa_lib.c:264:9: Taking false branch
262.       DH *ret = NULL;
263.   
264.       if (r == NULL)
               ^
265.           goto err;
266.       ret = DH_new();

crypto/dsa/dsa_lib.c:266:5: 
264.       if (r == NULL)
265.           goto err;
266. >     ret = DH_new();
267.       if (ret == NULL)
268.           goto err;

crypto/dh/dh_lib.c:103:1: start of procedure DH_new()
  101.   }
  102.   
  103. > DH *DH_new(void)
  104.   {
  105.       return DH_new_method(NULL);

crypto/dh/dh_lib.c:105:5: Skipping DH_new_method(): empty list of specs
  103.   DH *DH_new(void)
  104.   {
  105.       return DH_new_method(NULL);
             ^
  106.   }
  107.   

crypto/dh/dh_lib.c:106:1: return from a call to DH_new
  104.   {
  105.       return DH_new_method(NULL);
  106. > }
  107.   
  108.   DH *DH_new_method(ENGINE *engine)

crypto/dsa/dsa_lib.c:267:9: Taking true branch
265.           goto err;
266.       ret = DH_new();
267.       if (ret == NULL)
               ^
268.           goto err;
269.       if (r->p != NULL)

crypto/dsa/dsa_lib.c:289:2: 
287.       return ret;
288.   
289. >  err:
290.       DH_free(ret);
291.       return NULL;

crypto/dsa/dsa_lib.c:290:5: 
288.   
289.    err:
290. >     DH_free(ret);
291.       return NULL;
292.   }
