crypto/x509v3/v3_purp.c:92: error: NULL_DEREFERENCE
  pointer `pt` last assigned on line 91 could be null and is dereferenced at line 92, column 12.
Showing all 11 steps of the trace


crypto/x509v3/v3_purp.c:78:1: start of procedure X509_check_purpose()
76.    * things.
77.    */
78. > int X509_check_purpose(X509 *x, int id, int ca)
79.   {
80.       int idx;

crypto/x509v3/v3_purp.c:83:5: Skipping x509v3_cache_extensions(): empty list of specs
81.       const X509_PURPOSE *pt;
82.   
83.       x509v3_cache_extensions(x);
          ^
84.   
85.       /* Return if side-effect only call */

crypto/x509v3/v3_purp.c:86:9: Taking false branch
84.   
85.       /* Return if side-effect only call */
86.       if (id == -1)
              ^
87.           return 1;
88.       idx = X509_PURPOSE_get_by_id(id);

crypto/x509v3/v3_purp.c:88:5: Skipping X509_PURPOSE_get_by_id(): empty list of specs
86.       if (id == -1)
87.           return 1;
88.       idx = X509_PURPOSE_get_by_id(id);
          ^
89.       if (idx == -1)
90.           return -1;

crypto/x509v3/v3_purp.c:89:9: Taking false branch
87.           return 1;
88.       idx = X509_PURPOSE_get_by_id(id);
89.       if (idx == -1)
              ^
90.           return -1;
91.       pt = X509_PURPOSE_get0(idx);

crypto/x509v3/v3_purp.c:91:5: 
89.       if (idx == -1)
90.           return -1;
91. >     pt = X509_PURPOSE_get0(idx);
92.       return pt->check_purpose(pt, x, ca);
93.   }

crypto/x509v3/v3_purp.c:112:1: start of procedure X509_PURPOSE_get0()
  110.   }
  111.   
  112. > X509_PURPOSE *X509_PURPOSE_get0(int idx)
  113.   {
  114.       if (idx < 0)

crypto/x509v3/v3_purp.c:114:9: Taking true branch
  112.   X509_PURPOSE *X509_PURPOSE_get0(int idx)
  113.   {
  114.       if (idx < 0)
                 ^
  115.           return NULL;
  116.       if (idx < (int)X509_PURPOSE_COUNT)

crypto/x509v3/v3_purp.c:115:9: 
  113.   {
  114.       if (idx < 0)
  115. >         return NULL;
  116.       if (idx < (int)X509_PURPOSE_COUNT)
  117.           return xstandard + idx;

crypto/x509v3/v3_purp.c:119:1: return from a call to X509_PURPOSE_get0
  117.           return xstandard + idx;
  118.       return sk_X509_PURPOSE_value(xptable, idx - X509_PURPOSE_COUNT);
  119. > }
  120.   
  121.   int X509_PURPOSE_get_by_sname(const char *sname)

crypto/x509v3/v3_purp.c:92:5: 
90.           return -1;
91.       pt = X509_PURPOSE_get0(idx);
92. >     return pt->check_purpose(pt, x, ca);
93.   }
94.   
