crypto/bn/bntest.c:588: error: INTEGER_OVERFLOW_L2
  ([0, +oo] - 1):unsigned32 by call to `BN_div_recp`.
Showing all 11 steps of the trace


crypto/bn/bntest.c:561:1: Parameter `ctx->stack.depth`
559.   	}
560.   
561. > int test_div_recp(BIO *bp, BN_CTX *ctx)
562.   	{
563.   	BIGNUM *a,*b,*c,*d,*e;

crypto/bn/bntest.c:588:3: Call
586.   		b->neg=rand_neg();
587.   		BN_RECP_CTX_set(recp,b,ctx);
588.   		BN_div_recp(d,c,a,recp,ctx);
         ^
589.   		if (bp != NULL)
590.   			{

crypto/bn/bn_recp.c:131:1: Parameter `ctx->stack.depth`
  129.   	}
  130.   
  131. > int BN_div_recp(BIGNUM *dv, BIGNUM *rem, const BIGNUM *m,
  132.   	BN_RECP_CTX *recp, BN_CTX *ctx)
  133.   	{

crypto/bn/bn_recp.c:137:2: Call
  135.   	BIGNUM *a,*b,*d,*r;
  136.   
  137.   	BN_CTX_start(ctx);
          ^
  138.   	a=BN_CTX_get(ctx);
  139.   	b=BN_CTX_get(ctx);

crypto/bn/bn_ctx.c:257:1: Parameter `ctx->stack.depth`
    255.   	}
    256.   
    257. > void BN_CTX_start(BN_CTX *ctx)
    258.   	{
    259.   	CTXDBG_ENTRY("BN_CTX_start", ctx);

crypto/bn/bn_recp.c:154:3: Call
  152.   		BN_zero(d);
  153.   		if (!BN_copy(r,m)) return 0;
  154.   		BN_CTX_end(ctx);
           ^
  155.   		return(1);
  156.   		}

crypto/bn/bn_ctx.c:272:1: Parameter `ctx->stack.depth`
    270.   	}
    271.   
    272. > void BN_CTX_end(BN_CTX *ctx)
    273.   	{
    274.   	CTXDBG_ENTRY("BN_CTX_end", ctx);

crypto/bn/bn_ctx.c:279:21: Call
    277.   	else
    278.   		{
    279.   		unsigned int fp = BN_STACK_pop(&ctx->stack);
                               ^
    280.   		/* Does this stack frame have anything to release? */
    281.   		if(fp < ctx->used)

crypto/bn/bn_ctx.c:353:1: <LHS trace>
351.   	}
352.   
353. > static unsigned int BN_STACK_pop(BN_STACK *st)
354.   	{
355.   	return st->indexes[--(st->depth)];

crypto/bn/bn_ctx.c:353:1: Parameter `st->depth`
      351.   	}
      352.   
      353. > static unsigned int BN_STACK_pop(BN_STACK *st)
      354.   	{
      355.   	return st->indexes[--(st->depth)];

crypto/bn/bn_ctx.c:355:9: Binary operation: ([0, +oo] - 1):unsigned32 by call to `BN_div_recp` 
      353.   static unsigned int BN_STACK_pop(BN_STACK *st)
      354.   	{
      355.   	return st->indexes[--(st->depth)];
                     ^
      356.   	}
      357.   

static unsigned int BN_STACK_pop(BN_STACK *st)
	{
	return st->indexes[--(st->depth)];
	}
['int test_div_recp(BIO *bp, BN_CTX *ctx)\n\t{\n\tBIGNUM *a,*b,*c,*d,*e;\n\tBN_RECP_CTX *recp;\n\tint i;\n\trecp = BN_RECP_CTX_new();\n\ta = BN_new();\n\tb = BN_new();\n\tc = BN_new();\n\td = BN_new();\n\te = BN_new();\n\tfor (i=0; i<num0+num1; i++)\n\t\t{\n\t\tif (i < num1)\n\t\t\t{\n\t\t\tBN_bntest_rand(a,400,0,0);\n\t\t\tBN_copy(b,a);\n\t\t\tBN_lshift(a,a,i);\n\t\t\tBN_add_word(a,i);\n\t\t\t}\n\t\telse\n\t\t\tBN_bntest_rand(b,50+3*(i-num1),0,0);\n\t\ta->neg=rand_neg();\n\t\tb->neg=rand_neg();\n\t\tBN_RECP_CTX_set(recp,b,ctx);\n\t\tBN_div_recp(d,c,a,recp,ctx);\n\t\tif (bp != NULL)\n\t\t\t{\n\t\t\tif (!results)\n\t\t\t\t{\n\t\t\t\tBN_print(bp,a);\n\t\t\t\tBIO_puts(bp," / ");\n\t\t\t\tBN_print(bp,b);\n\t\t\t\tBIO_puts(bp," - ");\n\t\t\t\t}\n\t\t\tBN_print(bp,d);\n\t\t\tBIO_puts(bp,"\\n");\n\t\t\tif (!results)\n\t\t\t\t{\n\t\t\t\tBN_print(bp,a);\n\t\t\t\tBIO_puts(bp," % ");\n\t\t\t\tBN_print(bp,b);\n\t\t\t\tBIO_puts(bp," - ");\n\t\t\t\t}\n\t\t\tBN_print(bp,c);\n\t\t\tBIO_puts(bp,"\\n");\n\t\t\t}\n\t\tBN_mul(e,d,b,ctx);\n\t\tBN_add(d,e,c);\n\t\tBN_sub(d,d,a);\n\t\tif(!BN_is_zero(d))\n\t\t    {\n\t\t    fprintf(stderr,"Reciprocal division test failed!\\n");\n\t\t    fprintf(stderr,"a=");\n\t\t    BN_print_fp(stderr,a);\n\t\t    fprintf(stderr,"\\nb=");\n\t\t    BN_print_fp(stderr,b);\n\t\t    fprintf(stderr,"\\n");\n\t\t    return 0;\n\t\t    }\n\t\t}\n\tBN_free(a);\n\tBN_free(b);\n\tBN_free(c);\n\tBN_free(d);\n\tBN_free(e);\n\tBN_RECP_CTX_free(recp);\n\treturn(1);\n\t}', 'int BN_div_recp(BIGNUM *dv, BIGNUM *rem, const BIGNUM *m,\n\tBN_RECP_CTX *recp, BN_CTX *ctx)\n\t{\n\tint i,j,ret=0;\n\tBIGNUM *a,*b,*d,*r;\n\tBN_CTX_start(ctx);\n\ta=BN_CTX_get(ctx);\n\tb=BN_CTX_get(ctx);\n\tif (dv != NULL)\n\t\td=dv;\n\telse\n\t\td=BN_CTX_get(ctx);\n\tif (rem != NULL)\n\t\tr=rem;\n\telse\n\t\tr=BN_CTX_get(ctx);\n\tif (a == NULL || b == NULL || d == NULL || r == NULL) goto err;\n\tif (BN_ucmp(m,&(recp->N)) < 0)\n\t\t{\n\t\tBN_zero(d);\n\t\tif (!BN_copy(r,m)) return 0;\n\t\tBN_CTX_end(ctx);\n\t\treturn(1);\n\t\t}\n\ti=BN_num_bits(m);\n\tj=recp->num_bits<<1;\n\tif (j>i) i=j;\n\tif (i != recp->shift)\n\t\trecp->shift=BN_reciprocal(&(recp->Nr),&(recp->N),i,ctx);\n\tif (recp->shift == -1) goto err;\n\tif (!BN_rshift(a,m,recp->num_bits)) goto err;\n\tif (!BN_mul(b,a,&(recp->Nr),ctx)) goto err;\n\tif (!BN_rshift(d,b,i-recp->num_bits)) goto err;\n\td->neg=0;\n\tif (!BN_mul(b,&(recp->N),d,ctx)) goto err;\n\tif (!BN_usub(r,m,b)) goto err;\n\tr->neg=0;\n#if 1\n\tj=0;\n\twhile (BN_ucmp(r,&(recp->N)) >= 0)\n\t\t{\n\t\tif (j++ > 2)\n\t\t\t{\n\t\t\tBNerr(BN_F_BN_DIV_RECP,BN_R_BAD_RECIPROCAL);\n\t\t\tgoto err;\n\t\t\t}\n\t\tif (!BN_usub(r,r,&(recp->N))) goto err;\n\t\tif (!BN_add_word(d,1)) goto err;\n\t\t}\n#endif\n\tr->neg=BN_is_zero(r)?0:m->neg;\n\td->neg=m->neg^recp->N.neg;\n\tret=1;\nerr:\n\tBN_CTX_end(ctx);\n\tbn_check_top(dv);\n\tbn_check_top(rem);\n\treturn(ret);\n\t}', 'void BN_CTX_start(BN_CTX *ctx)\n\t{\n\tCTXDBG_ENTRY("BN_CTX_start", ctx);\n\tif(ctx->err_stack || ctx->too_many)\n\t\tctx->err_stack++;\n\telse if(!BN_STACK_push(&ctx->stack, ctx->used))\n\t\t{\n\t\tBNerr(BN_F_BN_CTX_START,BN_R_TOO_MANY_TEMPORARY_VARIABLES);\n\t\tctx->err_stack++;\n\t\t}\n\tCTXDBG_EXIT(ctx);\n\t}', 'void BN_CTX_end(BN_CTX *ctx)\n\t{\n\tCTXDBG_ENTRY("BN_CTX_end", ctx);\n\tif(ctx->err_stack)\n\t\tctx->err_stack--;\n\telse\n\t\t{\n\t\tunsigned int fp = BN_STACK_pop(&ctx->stack);\n\t\tif(fp < ctx->used)\n\t\t\tBN_POOL_release(&ctx->pool, ctx->used - fp);\n\t\tctx->used = fp;\n\t\tctx->too_many = 0;\n\t\t}\n\tCTXDBG_EXIT(ctx);\n\t}', 'static unsigned int BN_STACK_pop(BN_STACK *st)\n\t{\n\treturn st->indexes[--(st->depth)];\n\t}']