crypto/x509/x509_lu.c:508: error: NULL_DEREFERENCE
  pointer `obj` last assigned on line 507 could be null and is dereferenced at line 508, column 13.
Showing all 25 steps of the trace


crypto/x509/x509_lu.c:477:1: start of procedure X509_STORE_get1_certs()
475.   }
476.   
477. > STACK_OF(X509) *X509_STORE_get1_certs(X509_STORE_CTX *ctx, X509_NAME *nm)
478.   {
479.       int i, idx, cnt;

crypto/x509/x509_lu.c:483:5: 
481.       X509 *x;
482.       X509_OBJECT *obj;
483. >     sk = sk_X509_new_null();
484.       CRYPTO_w_lock(CRYPTO_LOCK_X509_STORE);
485.       idx = x509_object_idx_cnt(ctx->ctx->objs, X509_LU_X509, nm, &cnt);

crypto/stack/stack.c:145:1: start of procedure sk_new_null()
  143.   }
  144.   
  145. > _STACK *sk_new_null(void)
  146.   {
  147.       return sk_new((int (*)(const void *, const void *))0);

crypto/stack/stack.c:147:5: Skipping sk_new(): empty list of specs
  145.   _STACK *sk_new_null(void)
  146.   {
  147.       return sk_new((int (*)(const void *, const void *))0);
             ^
  148.   }
  149.   

crypto/stack/stack.c:148:1: return from a call to sk_new_null
  146.   {
  147.       return sk_new((int (*)(const void *, const void *))0);
  148. > }
  149.   
  150.   _STACK *sk_new(int (*c) (const void *, const void *))

crypto/x509/x509_lu.c:484:5: 
482.       X509_OBJECT *obj;
483.       sk = sk_X509_new_null();
484. >     CRYPTO_w_lock(CRYPTO_LOCK_X509_STORE);
485.       idx = x509_object_idx_cnt(ctx->ctx->objs, X509_LU_X509, nm, &cnt);
486.       if (idx < 0) {

crypto/lock.c:417:1: start of procedure CRYPTO_lock()
  415.   }
  416.   
  417. > void CRYPTO_lock(int mode, int type, const char *file, int line)
  418.   {
  419.   #ifdef LOCK_DEBUG

crypto/lock.c:444:9: Taking false branch
  442.       }
  443.   #endif
  444.       if (type < 0) {
                 ^
  445.           if (dynlock_lock_callback != NULL) {
  446.               struct CRYPTO_dynlock_value *pointer

crypto/lock.c:455:16: Taking true branch
  453.               CRYPTO_destroy_dynlockid(type);
  454.           }
  455.       } else if (locking_callback != NULL)
                        ^
  456.           locking_callback(mode, type, file, line);
  457.   }

crypto/lock.c:456:9: Skipping __function_pointer__(): unresolved function pointer
  454.           }
  455.       } else if (locking_callback != NULL)
  456.           locking_callback(mode, type, file, line);
                 ^
  457.   }
  458.   

crypto/lock.c:444:5: 
  442.       }
  443.   #endif
  444. >     if (type < 0) {
  445.           if (dynlock_lock_callback != NULL) {
  446.               struct CRYPTO_dynlock_value *pointer

crypto/lock.c:457:1: return from a call to CRYPTO_lock
  455.       } else if (locking_callback != NULL)
  456.           locking_callback(mode, type, file, line);
  457. > }
  458.   
  459.   int CRYPTO_add_lock(int *pointer, int amount, int type, const char *file,

crypto/x509/x509_lu.c:485:5: Skipping x509_object_idx_cnt(): empty list of specs
483.       sk = sk_X509_new_null();
484.       CRYPTO_w_lock(CRYPTO_LOCK_X509_STORE);
485.       idx = x509_object_idx_cnt(ctx->ctx->objs, X509_LU_X509, nm, &cnt);
           ^
486.       if (idx < 0) {
487.           /*

crypto/x509/x509_lu.c:486:9: Taking false branch
484.       CRYPTO_w_lock(CRYPTO_LOCK_X509_STORE);
485.       idx = x509_object_idx_cnt(ctx->ctx->objs, X509_LU_X509, nm, &cnt);
486.       if (idx < 0) {
               ^
487.           /*
488.            * Nothing found in cache: do lookup to possibly add new objects to

crypto/x509/x509_lu.c:506:10: 
504.           }
505.       }
506. >     for (i = 0; i < cnt; i++, idx++) {
507.           obj = sk_X509_OBJECT_value(ctx->ctx->objs, idx);
508.           x = obj->data.x509;

crypto/x509/x509_lu.c:506:17: Loop condition is true. Entering loop body
504.           }
505.       }
506.       for (i = 0; i < cnt; i++, idx++) {
                       ^
507.           obj = sk_X509_OBJECT_value(ctx->ctx->objs, idx);
508.           x = obj->data.x509;

crypto/x509/x509_lu.c:507:15: Condition is true
505.       }
506.       for (i = 0; i < cnt; i++, idx++) {
507.           obj = sk_X509_OBJECT_value(ctx->ctx->objs, idx);
                     ^
508.           x = obj->data.x509;
509.           X509_up_ref(x);

crypto/x509/x509_lu.c:507:9: 
505.       }
506.       for (i = 0; i < cnt; i++, idx++) {
507. >         obj = sk_X509_OBJECT_value(ctx->ctx->objs, idx);
508.           x = obj->data.x509;
509.           X509_up_ref(x);

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

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

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

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

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

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

crypto/x509/x509_lu.c:508:9: 
506.       for (i = 0; i < cnt; i++, idx++) {
507.           obj = sk_X509_OBJECT_value(ctx->ctx->objs, idx);
508. >         x = obj->data.x509;
509.           X509_up_ref(x);
510.           if (!sk_X509_push(sk, x)) {
