crypto/x509/x509_req.c:88: error: NULL_DEREFERENCE
  pointer `xk` last assigned on line 87 could be null and is dereferenced by call to `EVP_PKEY_cmp()` at line 88, column 13.
Showing all 16 steps of the trace


crypto/x509/x509_req.c:82:1: start of procedure X509_REQ_check_private_key()
80.   }
81.   
82. > int X509_REQ_check_private_key(X509_REQ *x, EVP_PKEY *k)
83.   {
84.       EVP_PKEY *xk = NULL;

crypto/x509/x509_req.c:84:5: 
82.   int X509_REQ_check_private_key(X509_REQ *x, EVP_PKEY *k)
83.   {
84. >     EVP_PKEY *xk = NULL;
85.       int ok = 0;
86.   

crypto/x509/x509_req.c:85:5: 
83.   {
84.       EVP_PKEY *xk = NULL;
85. >     int ok = 0;
86.   
87.       xk = X509_REQ_get_pubkey(x);

crypto/x509/x509_req.c:87:5: 
85.       int ok = 0;
86.   
87. >     xk = X509_REQ_get_pubkey(x);
88.       switch (EVP_PKEY_cmp(xk, k)) {
89.       case 1:

crypto/x509/x509_req.c:63:1: start of procedure X509_REQ_get_pubkey()
  61.   }
  62.   
  63. > EVP_PKEY *X509_REQ_get_pubkey(X509_REQ *req)
  64.   {
  65.       if (req == NULL)

crypto/x509/x509_req.c:65:9: Taking false branch
  63.   EVP_PKEY *X509_REQ_get_pubkey(X509_REQ *req)
  64.   {
  65.       if (req == NULL)
                ^
  66.           return (NULL);
  67.       return (X509_PUBKEY_get(req->req_info.pubkey));

crypto/x509/x509_req.c:67:5: 
  65.       if (req == NULL)
  66.           return (NULL);
  67. >     return (X509_PUBKEY_get(req->req_info.pubkey));
  68.   }
  69.   

crypto/x509/x_pubkey.c:168:1: start of procedure X509_PUBKEY_get()
    166.   }
    167.   
    168. > EVP_PKEY *X509_PUBKEY_get(X509_PUBKEY *key)
    169.   {
    170.       EVP_PKEY *ret = X509_PUBKEY_get0(key);

crypto/x509/x_pubkey.c:170:5: Skipping X509_PUBKEY_get0(): empty list of specs
    168.   EVP_PKEY *X509_PUBKEY_get(X509_PUBKEY *key)
    169.   {
    170.       EVP_PKEY *ret = X509_PUBKEY_get0(key);
               ^
    171.       if (ret != NULL)
    172.           EVP_PKEY_up_ref(ret);

crypto/x509/x_pubkey.c:171:9: Taking false branch
    169.   {
    170.       EVP_PKEY *ret = X509_PUBKEY_get0(key);
    171.       if (ret != NULL)
                   ^
    172.           EVP_PKEY_up_ref(ret);
    173.       return ret;

crypto/x509/x_pubkey.c:173:5: 
    171.       if (ret != NULL)
    172.           EVP_PKEY_up_ref(ret);
    173. >     return ret;
    174.   }
    175.   

crypto/x509/x_pubkey.c:174:1: return from a call to X509_PUBKEY_get
    172.           EVP_PKEY_up_ref(ret);
    173.       return ret;
    174. > }
    175.   
    176.   /*

crypto/x509/x509_req.c:68:1: return from a call to X509_REQ_get_pubkey
  66.           return (NULL);
  67.       return (X509_PUBKEY_get(req->req_info.pubkey));
  68. > }
  69.   
  70.   EVP_PKEY *X509_REQ_get0_pubkey(X509_REQ *req)

crypto/x509/x509_req.c:88:5: 
86.   
87.       xk = X509_REQ_get_pubkey(x);
88. >     switch (EVP_PKEY_cmp(xk, k)) {
89.       case 1:
90.           ok = 1;

crypto/evp/p_lib.c:109:1: start of procedure EVP_PKEY_cmp()
  107.   }
  108.   
  109. > int EVP_PKEY_cmp(const EVP_PKEY *a, const EVP_PKEY *b)
  110.   {
  111.       if (a->type != b->type)

crypto/evp/p_lib.c:111:9: 
  109.   int EVP_PKEY_cmp(const EVP_PKEY *a, const EVP_PKEY *b)
  110.   {
  111. >     if (a->type != b->type)
  112.           return -1;
  113.   
