Revert in-house pow10 (d80a3ea) and fix oss-fuzz/16922

Probably can be fixed but merging it was wrong so let's revert.
pull/1955/head
Ebrahim Byagowi 6 years ago
parent 41d6e95b0d
commit d3b984d379
  1. 37
      src/hb-cff-interp-dict-common.hh
  2. BIN
      test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-subset-fuzzer-5728664968232960

@ -75,37 +75,6 @@ struct top_dict_values_t : dict_values_t<OPSTR>
unsigned int FDArrayOffset;
};
/* Compile time calculating 10^n for n = 2^i */
constexpr double
pow10_of_2i (unsigned int n)
{
return n == 1 ? 10. : pow10_of_2i (n >> 1) * pow10_of_2i (n >> 1);
}
static const double powers_of_10[] =
{
pow10_of_2i (0x100),
pow10_of_2i (0x80),
pow10_of_2i (0x40),
pow10_of_2i (0x20),
pow10_of_2i (0x10),
pow10_of_2i (0x8),
pow10_of_2i (0x4),
pow10_of_2i (0x2),
pow10_of_2i (0x1),
};
/* Works for x < 512 */
inline double
_hb_pow10 (unsigned int x)
{
unsigned int mask = 0x100; /* Should be same with the first element */
unsigned long result = 1;
const double *power = powers_of_10;
for (; mask; ++power, mask >>= 1) if (mask & x) result *= *power;
return result;
}
struct dict_opset_t : opset_t<number_t>
{
static void process_op (op_code_t op, interp_env_t<number_t>& env)
@ -168,7 +137,7 @@ struct dict_opset_t : opset_t<number_t>
value = (double) (neg ? -int_part : int_part);
if (frac_count > 0)
{
double frac = frac_part / _hb_pow10 (frac_count);
double frac = frac_part / pow (10.0, (double) frac_count);
if (neg) frac = -frac;
value += frac;
}
@ -184,9 +153,9 @@ struct dict_opset_t : opset_t<number_t>
if (exp_part != 0)
{
if (exp_neg)
value /= _hb_pow10 (exp_part);
value /= pow (10.0, (double) exp_part);
else
value *= _hb_pow10 (exp_part);
value *= pow (10.0, (double) exp_part);
}
return value;

Loading…
Cancel
Save