[HarfBuzz] harfbuzz: Branch 'master' - 6 commits
Behdad Esfahbod
behdad at kemper.freedesktop.org
Tue Dec 4 09:14:28 UTC 2018
src/hb-cff-interp-common.hh | 88 +---------
src/hb-cff-interp-dict-common.hh | 10 -
src/hb-cff2-interp-cs.hh | 6
test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-shape-fuzzer-5647267827023872 |binary
test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-shape-fuzzer-5725855502827520 |binary
test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-shape-fuzzer-5736657639178240 |binary
6 files changed, 23 insertions(+), 81 deletions(-)
New commits:
commit c968869f212dbfcb86d42fb36049328521cbf00c
Merge: 8c05b955 c48f53d3
Author: Behdad Esfahbod <behdad at behdad.org>
Date: Tue Dec 4 04:14:13 2018 -0500
Merge pull request #1441 from harfbuzz/cff-doublenum
use double as CFF Number implementation
commit c48f53d30901dfc20b7432c2947e66642010dc4e
Author: Michiharu Ariza <ariza at adobe.com>
Date: Mon Dec 3 16:59:41 2018 -0800
more double changes
diff --git a/src/hb-cff2-interp-cs.hh b/src/hb-cff2-interp-cs.hh
index 935a1a1f..d258b814 100644
--- a/src/hb-cff2-interp-cs.hh
+++ b/src/hb-cff2-interp-cs.hh
@@ -49,7 +49,7 @@ struct BlendArg : Number
inline void set_int (int v) { reset_blends (); Number::set_int (v); }
inline void set_fixed (int32_t v) { reset_blends (); Number::set_fixed (v); }
- inline void set_real (float v) { reset_blends (); Number::set_real (v); }
+ inline void set_real (double v) { reset_blends (); Number::set_real (v); }
inline void set_blends (unsigned int numValues_, unsigned int valueIndex_,
unsigned int numBlends, const BlendArg *blends_)
@@ -172,7 +172,7 @@ struct CFF2CSInterpEnv : CSInterpEnv<BlendArg, CFF2Subrs>
double v = arg.to_real ();
for (unsigned int i = 0; i < scalars.len; i++)
{
- v += scalars[i] * arg.deltas[i].to_real ();
+ v += (double)scalars[i] * arg.deltas[i].to_real ();
}
arg.set_real (v);
arg.deltas.resize (0);
diff --git a/test/api/test-ot-extents-cff.c b/test/api/test-ot-extents-cff.c
index bb70a626..49b87997 100644
--- a/test/api/test-ot-extents-cff.c
+++ b/test/api/test-ot-extents-cff.c
@@ -171,7 +171,7 @@ test_extents_cff2_vsindex (void)
g_assert_cmpint (extents.x_bearing, ==, 11);
g_assert_cmpint (extents.y_bearing, ==, 656);
g_assert_cmpint (extents.width, ==, 653);
- g_assert_cmpint (extents.height, ==, -657);
+ g_assert_cmpint (extents.height, ==, -656);
result = hb_font_get_glyph_extents (font, 2, &extents);
g_assert (result);
commit 9424e8052686a6a93e0d30e38aecbe927db9d787
Author: Michiharu Ariza <ariza at adobe.com>
Date: Mon Dec 3 16:18:10 2018 -0800
added minimized test cases
diff --git a/test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-shape-fuzzer-5647267827023872 b/test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-shape-fuzzer-5647267827023872
new file mode 100644
index 00000000..068e7e8f
Binary files /dev/null and b/test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-shape-fuzzer-5647267827023872 differ
diff --git a/test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-shape-fuzzer-5725855502827520 b/test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-shape-fuzzer-5725855502827520
new file mode 100644
index 00000000..5781bbad
Binary files /dev/null and b/test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-shape-fuzzer-5725855502827520 differ
diff --git a/test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-shape-fuzzer-5736657639178240 b/test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-shape-fuzzer-5736657639178240
new file mode 100644
index 00000000..343429cf
Binary files /dev/null and b/test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-shape-fuzzer-5736657639178240 differ
commit 5fff6ab0024547a8ac47723a0047f4b17416d6ce
Author: Michiharu Ariza <ariza at adobe.com>
Date: Mon Dec 3 16:06:58 2018 -0800
additional precision made a difference in extents test
diff --git a/src/hb-cff-interp-common.hh b/src/hb-cff-interp-common.hh
index 396bc8c7..f2ccc2bd 100644
--- a/src/hb-cff-interp-common.hh
+++ b/src/hb-cff-interp-common.hh
@@ -229,7 +229,7 @@ struct Number
{
return (int32_t)(value * 65536.0);
}
- inline void set_real (double v) { value = (double)v; }
+ inline void set_real (double v) { value = v; }
inline double to_real (void) const
{
return value;
diff --git a/src/hb-cff2-interp-cs.hh b/src/hb-cff2-interp-cs.hh
index 8d193d62..935a1a1f 100644
--- a/src/hb-cff2-interp-cs.hh
+++ b/src/hb-cff2-interp-cs.hh
@@ -169,7 +169,7 @@ struct CFF2CSInterpEnv : CSInterpEnv<BlendArg, CFF2Subrs>
{
if (likely (scalars.len == arg.deltas.len))
{
- float v = arg.to_real ();
+ double v = arg.to_real ();
for (unsigned int i = 0; i < scalars.len; i++)
{
v += scalars[i] * arg.deltas[i].to_real ();
diff --git a/test/api/test-ot-extents-cff.c b/test/api/test-ot-extents-cff.c
index 49b87997..bb70a626 100644
--- a/test/api/test-ot-extents-cff.c
+++ b/test/api/test-ot-extents-cff.c
@@ -171,7 +171,7 @@ test_extents_cff2_vsindex (void)
g_assert_cmpint (extents.x_bearing, ==, 11);
g_assert_cmpint (extents.y_bearing, ==, 656);
g_assert_cmpint (extents.width, ==, 653);
- g_assert_cmpint (extents.height, ==, -656);
+ g_assert_cmpint (extents.height, ==, -657);
result = hb_font_get_glyph_extents (font, 2, &extents);
g_assert (result);
commit 9e5180cd444b6900a0fa0c3df4c8138f9a663383
Author: Michiharu Ariza <ariza at adobe.com>
Date: Mon Dec 3 15:32:42 2018 -0800
more double changes
diff --git a/src/hb-cff-interp-common.hh b/src/hb-cff-interp-common.hh
index 2ec056ff..396bc8c7 100644
--- a/src/hb-cff-interp-common.hh
+++ b/src/hb-cff-interp-common.hh
@@ -229,10 +229,10 @@ struct Number
{
return (int32_t)(value * 65536.0);
}
- inline void set_real (float v) { value = (double)v; }
- inline float to_real (void) const
+ inline void set_real (double v) { value = (double)v; }
+ inline double to_real (void) const
{
- return (float)value;
+ return value;
}
inline int ceil (void) const
@@ -520,7 +520,7 @@ struct ArgStack : Stack<ARG, 513>
n.set_fixed (v);
}
- inline void push_real (float v)
+ inline void push_real (double v)
{
ARG &n = S::push ();
n.set_real (v);
diff --git a/src/hb-cff-interp-dict-common.hh b/src/hb-cff-interp-dict-common.hh
index aff35625..2822af40 100644
--- a/src/hb-cff-interp-dict-common.hh
+++ b/src/hb-cff-interp-dict-common.hh
@@ -103,9 +103,9 @@ struct DictOpSet : OpSet<Number>
}
}
- static inline float parse_bcd (SubByteStr& substr)
+ static inline double parse_bcd (SubByteStr& substr)
{
- float v = 0.0f;
+ double v = 0.0;
bool neg = false;
double int_part = 0;
@@ -126,7 +126,7 @@ struct DictOpSet : OpSet<Number>
if (!substr.avail ())
{
substr.set_error ();
- return 0.0f;
+ return 0.0;
}
byte = substr[0];
substr.inc ();
@@ -152,13 +152,13 @@ struct DictOpSet : OpSet<Number>
else
value *= pow (10.0, (double)exp_part);
}
- return (float)value;
+ return value;
case NEG:
if (i != 0)
{
substr.set_error ();
- return 0.0f;
+ return 0.0;
}
neg = true;
break;
commit 9af33d7a2ad5ce88fc508bc5c6a56be4650d2621
Author: Michiharu Ariza <ariza at adobe.com>
Date: Mon Dec 3 14:48:46 2018 -0800
Number to use double for all types
diff --git a/src/hb-cff-interp-common.hh b/src/hb-cff-interp-common.hh
index aa2a1b95..2ec056ff 100644
--- a/src/hb-cff-interp-common.hh
+++ b/src/hb-cff-interp-common.hh
@@ -218,80 +218,41 @@ inline unsigned int OpCode_Size (OpCode op) { return Is_OpCode_ESC (op) ? 2: 1;
struct Number
{
inline void init (void)
- { set_int (0); }
+ { set_real (0.0); }
inline void fini (void)
{}
- inline void set_int (int v) { format = NumInt; u.int_val = v; }
- inline int to_int (void) const { return is_int ()? u.int_val: (int)to_real (); }
- inline void set_fixed (int32_t v) { format = NumFixed; u.fixed_val = v; }
+ inline void set_int (int v) { value = (double)v; }
+ inline int to_int (void) const { return (int)value; }
+ inline void set_fixed (int32_t v) { value = v / 65536.0; }
inline int32_t to_fixed (void) const
{
- if (is_fixed ())
- return u.fixed_val;
- else if (is_real ())
- return (int32_t)(u.real_val * 65536.0f);
- else
- return (int32_t)(u.int_val << 16);
+ return (int32_t)(value * 65536.0);
}
- inline void set_real (float v) { format = NumReal; u.real_val = v; }
+ inline void set_real (float v) { value = (double)v; }
inline float to_real (void) const
{
- if (is_real ())
- return u.real_val;
- if (is_fixed ())
- return u.fixed_val / 65536.0f;
- else
- return (float)u.int_val;
+ return (float)value;
}
inline int ceil (void) const
{
- switch (format)
- {
- default:
- case NumInt:
- return u.int_val;
- case NumFixed:
- return (u.fixed_val + 0xFFFF) >> 16;
- case NumReal:
- return (int)ceilf (u.real_val);
- }
+ return (int)::ceil (value);
}
inline int floor (void) const
{
- switch (format)
- {
- default:
- case NumInt:
- return u.int_val;
- case NumFixed:
- return u.fixed_val >> 16;
- case NumReal:
- return (int)floorf (u.real_val);
- }
+ return (int)::floor (value);
}
inline bool in_int_range (void) const
{
- if (is_int ())
- return true;
- if (is_fixed () && ((u.fixed_val & 0xFFFF) == 0))
- return true;
- else
- return ((float)(int16_t)to_int () == u.real_val);
+ return ((double)(int16_t)to_int () == value);
}
inline bool operator > (const Number &n) const
{
- switch (format)
- {
- default:
- case NumInt: return u.int_val > n.to_int ();
- case NumFixed: return u.fixed_val > n.to_fixed ();
- case NumReal: return u.real_val > n.to_real ();
- }
+ return value > n.to_real ();
}
inline bool operator < (const Number &n) const
@@ -305,32 +266,13 @@ struct Number
inline const Number &operator += (const Number &n)
{
- if (format == NumReal || n.format == NumReal)
- set_real (to_real () + n.to_real ());
- else if (format == NumFixed || n.format == NumFixed)
- set_fixed (to_fixed () + n.to_fixed ());
- else
- set_int (to_int () + n.to_int ());
+ set_real (to_real () + n.to_real ());
return *this;
}
protected:
- enum NumFormat {
- NumInt,
- NumFixed,
- NumReal
- };
- NumFormat format;
- union {
- int int_val;
- int32_t fixed_val;
- float real_val;
- } u;
-
- inline bool is_int (void) const { return format == NumInt; }
- inline bool is_fixed (void) const { return format == NumFixed; }
- inline bool is_real (void) const { return format == NumReal; }
+ double value;
};
/* byte string */
More information about the HarfBuzz
mailing list