crypto/x509/x509_vfy.c:581: error: NULL_DEREFERENCE
  pointer `x` last assigned on line 571 could be null and is dereferenced at line 581, column 36.
Showing all 21 steps of the trace


crypto/x509/x509_vfy.c:531:1: start of procedure check_chain_extensions()
529.    */
530.   
531. > static int check_chain_extensions(X509_STORE_CTX *ctx)
532.   {
533.       int i, ok = 0, must_be_ca, plen = 0;

crypto/x509/x509_vfy.c:533:5: 
531.   static int check_chain_extensions(X509_STORE_CTX *ctx)
532.   {
533. >     int i, ok = 0, must_be_ca, plen = 0;
534.       X509 *x;
535.       int (*cb) (int xok, X509_STORE_CTX *xctx);

crypto/x509/x509_vfy.c:536:5: 
534.       X509 *x;
535.       int (*cb) (int xok, X509_STORE_CTX *xctx);
536. >     int proxy_path_length = 0;
537.       int purpose;
538.       int allow_proxy_certs;

crypto/x509/x509_vfy.c:539:5: 
537.       int purpose;
538.       int allow_proxy_certs;
539. >     cb = ctx->verify_cb;
540.   
541.       /*-

crypto/x509/x509_vfy.c:550:5: 
548.        *     all certificates in the chain except the leaf certificate.
549.        */
550. >     must_be_ca = -1;
551.   
552.       /* CRL path validation */

crypto/x509/x509_vfy.c:553:9: Taking true branch
551.   
552.       /* CRL path validation */
553.       if (ctx->parent) {
               ^
554.           allow_proxy_certs = 0;
555.           purpose = X509_PURPOSE_CRL_SIGN;

crypto/x509/x509_vfy.c:554:9: 
552.       /* CRL path validation */
553.       if (ctx->parent) {
554. >         allow_proxy_certs = 0;
555.           purpose = X509_PURPOSE_CRL_SIGN;
556.       } else {

crypto/x509/x509_vfy.c:555:9: 
553.       if (ctx->parent) {
554.           allow_proxy_certs = 0;
555. >         purpose = X509_PURPOSE_CRL_SIGN;
556.       } else {
557.           allow_proxy_certs =

crypto/x509/x509_vfy.c:569:10: 
567.   
568.       /* Check all untrusted certificates */
569. >     for (i = 0; i < ctx->last_untrusted; i++) {
570.           int ret;
571.           x = sk_X509_value(ctx->chain, i);

crypto/x509/x509_vfy.c:569:17: Loop condition is true. Entering loop body
567.   
568.       /* Check all untrusted certificates */
569.       for (i = 0; i < ctx->last_untrusted; i++) {
                       ^
570.           int ret;
571.           x = sk_X509_value(ctx->chain, i);

crypto/x509/x509_vfy.c:571:13: Condition is true
569.       for (i = 0; i < ctx->last_untrusted; i++) {
570.           int ret;
571.           x = sk_X509_value(ctx->chain, i);
                   ^
572.           if (!(ctx->param->flags & X509_V_FLAG_IGNORE_CRITICAL)
573.               && (x->ex_flags & EXFLAG_CRITICAL)) {

crypto/x509/x509_vfy.c:571:9: 
569.       for (i = 0; i < ctx->last_untrusted; i++) {
570.           int ret;
571. >         x = sk_X509_value(ctx->chain, i);
572.           if (!(ctx->param->flags & X509_V_FLAG_IGNORE_CRITICAL)
573.               && (x->ex_flags & EXFLAG_CRITICAL)) {

crypto/stack/stack.c:326:1: start of procedure sk_value()
  324.   }
  325.   
  326. > void *sk_value(const _STACK *st, int i)
  327.   {
  328.       if (!st || (i < 0) || (i >= st->num))

crypto/stack/stack.c:328:10: Taking false branch
  326.   void *sk_value(const _STACK *st, int i)
  327.   {
  328.       if (!st || (i < 0) || (i >= st->num))
                  ^
  329.           return NULL;
  330.       return st->data[i];

crypto/stack/stack.c:328:17: Taking false branch
  326.   void *sk_value(const _STACK *st, int i)
  327.   {
  328.       if (!st || (i < 0) || (i >= st->num))
                         ^
  329.           return NULL;
  330.       return st->data[i];

crypto/stack/stack.c:328:28: Taking true branch
  326.   void *sk_value(const _STACK *st, int i)
  327.   {
  328.       if (!st || (i < 0) || (i >= st->num))
                                    ^
  329.           return NULL;
  330.       return st->data[i];

crypto/stack/stack.c:329:9: 
  327.   {
  328.       if (!st || (i < 0) || (i >= st->num))
  329. >         return NULL;
  330.       return st->data[i];
  331.   }

crypto/stack/stack.c:331:1: return from a call to sk_value
  329.           return NULL;
  330.       return st->data[i];
  331. > }
  332.   
  333.   void *sk_set(_STACK *st, int i, void *value)

crypto/x509/x509_vfy.c:572:15: Taking false branch
570.           int ret;
571.           x = sk_X509_value(ctx->chain, i);
572.           if (!(ctx->param->flags & X509_V_FLAG_IGNORE_CRITICAL)
                     ^
573.               && (x->ex_flags & EXFLAG_CRITICAL)) {
574.               ctx->error = X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION;

crypto/x509/x509_vfy.c:581:14: Taking true branch
579.                   goto end;
580.           }
581.           if (!allow_proxy_certs && (x->ex_flags & EXFLAG_PROXY)) {
                    ^
582.               ctx->error = X509_V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED;
583.               ctx->error_depth = i;

crypto/x509/x509_vfy.c:581:36: 
579.                   goto end;
580.           }
581. >         if (!allow_proxy_certs && (x->ex_flags & EXFLAG_PROXY)) {
582.               ctx->error = X509_V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED;
583.               ctx->error_depth = i;
