Branch: Tag:

2019-08-09

2019-08-09 13:12:03 by Henrik Grubbström (Grubba) <grubba@grubba.org>

Runtime: Increased paranoia.

Check the return value from call_lfun().

Fixes [CID 1398324] and [CID 1400853].

1479:    if (DO_INT_TYPE_ADD_OVERFLOW(Pike_sp[-2].u.integer, Pike_sp[-1].u.integer, &res))    {    convert_svalue_to_bignum(Pike_sp-2); -  call_lfun(LFUN_ADD,LFUN_RADD); +  if (LIKELY(call_lfun(LFUN_ADD,LFUN_RADD))) {    return 1;    } -  +  Pike_fatal("Failed to call `+() in bignum.\n"); +  }    Pike_sp[-2].u.integer = res;    Pike_sp--;    }
2271:    if(INT_TYPE_SUB_OVERFLOW(Pike_sp[-2].u.integer, Pike_sp[-1].u.integer))    {    convert_stack_top_to_bignum(); -  call_lfun(LFUN_SUBTRACT, LFUN_RSUBTRACT); +  if (LIKELY(call_lfun(LFUN_SUBTRACT, LFUN_RSUBTRACT))) {    return;    } -  +  Pike_fatal("Failed to call `-() in bignum.\n"); +  }    Pike_sp--;    SET_SVAL(Pike_sp[-1], PIKE_T_INT, NUMBER_NUMBER, integer,    Pike_sp[-1].u.integer - Pike_sp[0].u.integer);
4039:    stack_swap();    convert_stack_top_to_bignum();    stack_swap(); -  call_lfun(LFUN_DIVIDE,LFUN_RDIVIDE); +  if (LIKELY(call_lfun(LFUN_DIVIDE,LFUN_RDIVIDE))) {    return;    } -  +  Pike_fatal("Failed to call `/() in bignum.\n"); +  }    else    tmp = Pike_sp[-2].u.integer/Pike_sp[-1].u.integer;    Pike_sp--;