crypto/rsa/rsa_lib.c:225: error: NULL_DEREFERENCE
  pointer `meth` last assigned on line 224 could be null and is dereferenced at line 225, column 6.
Showing all 28 steps of the trace


crypto/rsa/rsa_lib.c:204:1: start of procedure RSA_free()
202.   	}
203.   
204. > void RSA_free(RSA *r)
205.   	{
206.   	const RSA_METHOD *meth;

crypto/rsa/rsa_lib.c:209:6: Taking false branch
207.   	int i;
208.   
209.   	if (r == NULL) return;
            ^
210.   
211.   	i=CRYPTO_add(&r->references,-1,CRYPTO_LOCK_RSA);

crypto/rsa/rsa_lib.c:211:2: 
209.   	if (r == NULL) return;
210.   
211. > 	i=CRYPTO_add(&r->references,-1,CRYPTO_LOCK_RSA);
212.   #ifdef REF_PRINT
213.   	REF_PRINT("RSA",r);

crypto/cryptlib.c:415:1: start of procedure CRYPTO_add_lock()
  413.   	}
  414.   
  415. > int CRYPTO_add_lock(int *pointer, int amount, int type, const char *file,
  416.   	     int line)
  417.   	{

crypto/cryptlib.c:418:2: 
  416.   	     int line)
  417.   	{
  418. > 	int ret = 0;
  419.   
  420.   	if (add_lock_callback != NULL)

crypto/cryptlib.c:420:6: Taking true branch
  418.   	int ret = 0;
  419.   
  420.   	if (add_lock_callback != NULL)
              ^
  421.   		{
  422.   #ifdef LOCK_DEBUG

crypto/cryptlib.c:426:3: Skipping __function_pointer__(): unresolved function pointer
  424.   #endif
  425.   
  426.   		ret=add_lock_callback(pointer,amount,type,file,line);
           ^
  427.   #ifdef LOCK_DEBUG
  428.   		fprintf(stderr,"ladd:%08lx:%2d+%2d->%2d %-18s %s:%d\n",

crypto/cryptlib.c:434:3: 
  432.   			file,line);
  433.   #endif
  434. > 		*pointer=ret;
  435.   		}
  436.   	else

crypto/cryptlib.c:451:2: 
  449.   		CRYPTO_lock(CRYPTO_UNLOCK|CRYPTO_WRITE,type,file,line);
  450.   		}
  451. > 	return(ret);
  452.   	}
  453.   

crypto/cryptlib.c:452:2: return from a call to CRYPTO_add_lock
  450.   		}
  451.   	return(ret);
  452.   	}
          ^
  453.   
  454.   const char *CRYPTO_get_lock_name(int type)

crypto/rsa/rsa_lib.c:215:6: Taking false branch
213.   	REF_PRINT("RSA",r);
214.   #endif
215.   	if (i > 0) return;
            ^
216.   #ifdef REF_CHECK
217.   	if (i < 0)

crypto/rsa/rsa_lib.c:224:2: 
222.   #endif
223.   
224. > 	meth = ENGINE_get_RSA(r->engine);
225.   	if (meth->finish != NULL)
226.   		meth->finish(r);

crypto/engine/engine_list.c:563:1: start of procedure ENGINE_get_RSA()
  561.   	}
  562.   
  563. > const RSA_METHOD *ENGINE_get_RSA(ENGINE *e)
  564.   	{
  565.   	if(e == NULL)

crypto/engine/engine_list.c:565:5: Taking true branch
  563.   const RSA_METHOD *ENGINE_get_RSA(ENGINE *e)
  564.   	{
  565.   	if(e == NULL)
             ^
  566.   		{
  567.   		ENGINEerr(ENGINE_F_ENGINE_GET_RSA,

crypto/engine/engine_list.c:567:3: 
  565.   	if(e == NULL)
  566.   		{
  567. > 		ENGINEerr(ENGINE_F_ENGINE_GET_RSA,
  568.   			ERR_R_PASSED_NULL_PARAMETER);
  569.   		return NULL;

crypto/err/err.c:355:1: start of procedure ERR_put_error()
    353.   /********************************************************/
    354.   
    355. > void ERR_put_error(int lib, int func, int reason, const char *file,
    356.   	     int line)
    357.   	{

crypto/err/err.c:379:2: Skipping ERR_get_state(): empty list of specs
    377.   	}
    378.   #endif
    379.   	es=ERR_get_state();
            ^
    380.   
    381.   	es->top=(es->top+1)%ERR_NUM_ERRORS;

crypto/err/err.c:381:2: 
    379.   	es=ERR_get_state();
    380.   
    381. > 	es->top=(es->top+1)%ERR_NUM_ERRORS;
    382.   	if (es->top == es->bottom)
    383.   		es->bottom=(es->bottom+1)%ERR_NUM_ERRORS;

crypto/err/err.c:382:6: Taking false branch
    380.   
    381.   	es->top=(es->top+1)%ERR_NUM_ERRORS;
    382.   	if (es->top == es->bottom)
                ^
    383.   		es->bottom=(es->bottom+1)%ERR_NUM_ERRORS;
    384.   	es->err_buffer[es->top]=ERR_PACK(lib,func,reason);

crypto/err/err.c:384:2: 
    382.   	if (es->top == es->bottom)
    383.   		es->bottom=(es->bottom+1)%ERR_NUM_ERRORS;
    384. > 	es->err_buffer[es->top]=ERR_PACK(lib,func,reason);
    385.   	es->err_file[es->top]=file;
    386.   	es->err_line[es->top]=line;

crypto/err/err.c:385:2: 
    383.   		es->bottom=(es->bottom+1)%ERR_NUM_ERRORS;
    384.   	es->err_buffer[es->top]=ERR_PACK(lib,func,reason);
    385. > 	es->err_file[es->top]=file;
    386.   	es->err_line[es->top]=line;
    387.   	err_clear_data(es,es->top);

crypto/err/err.c:386:2: 
    384.   	es->err_buffer[es->top]=ERR_PACK(lib,func,reason);
    385.   	es->err_file[es->top]=file;
    386. > 	es->err_line[es->top]=line;
    387.   	err_clear_data(es,es->top);
    388.   	}

crypto/err/err.c:387:2: Taking true branch
    385.   	es->err_file[es->top]=file;
    386.   	es->err_line[es->top]=line;
    387.   	err_clear_data(es,es->top);
            ^
    388.   	}
    389.   

crypto/err/err.c:387:2: Taking false branch
    385.   	es->err_file[es->top]=file;
    386.   	es->err_line[es->top]=line;
    387.   	err_clear_data(es,es->top);
            ^
    388.   	}
    389.   

crypto/err/err.c:388:2: return from a call to ERR_put_error
    386.   	es->err_line[es->top]=line;
    387.   	err_clear_data(es,es->top);
    388.   	}
            ^
    389.   
    390.   void ERR_clear_error(void)

crypto/engine/engine_list.c:569:3: 
  567.   		ENGINEerr(ENGINE_F_ENGINE_GET_RSA,
  568.   			ERR_R_PASSED_NULL_PARAMETER);
  569. > 		return NULL;
  570.   		}
  571.   	return e->rsa_meth;

crypto/engine/engine_list.c:572:2: return from a call to ENGINE_get_RSA
  570.   		}
  571.   	return e->rsa_meth;
  572.   	}
          ^
  573.   
  574.   const DSA_METHOD *ENGINE_get_DSA(ENGINE *e)

crypto/rsa/rsa_lib.c:225:6: 
223.   
224.   	meth = ENGINE_get_RSA(r->engine);
225. > 	if (meth->finish != NULL)
226.   		meth->finish(r);
227.   	ENGINE_finish(r->engine);
