diff --git a/src/Makefile.am b/src/Makefile.am index bb085ad00..2a3d6c79a 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -130,6 +130,7 @@ pkgconfig_DATA = harfbuzz.pc EXTRA_DIST += harfbuzz.pc.in FUZZING_CPPFLAGS= \ + -DNDEBUG \ -DHB_MAX_NESTING_LEVEL=3 \ -DHB_SANITIZE_MAX_EDITS=3 \ -DHB_BUFFER_MAX_EXPANSION_FACTOR=3 \ diff --git a/src/hb-buffer-private.hh b/src/hb-buffer-private.hh index c8eec3c17..c3184cf76 100644 --- a/src/hb-buffer-private.hh +++ b/src/hb-buffer-private.hh @@ -112,10 +112,6 @@ struct hb_buffer_t { unsigned int serial; - /* These reflect current allocations of the bytes in glyph_info_t's var1 and var2. */ - uint8_t allocated_var_bytes[8]; - const char *allocated_var_owner[8]; - /* Text before / after the main buffer contents. * Always in Unicode, and ordered outward. * Index 0 is for "pre-context", 1 for "post-context". */ @@ -123,11 +119,24 @@ struct hb_buffer_t { hb_codepoint_t context[2][CONTEXT_LENGTH]; unsigned int context_len[2]; - /* Debugging */ + /* Debugging API */ hb_buffer_message_func_t message_func; void *message_data; hb_destroy_func_t message_destroy; +#ifndef NDEBUG + /* Internal debugging. */ + /* These reflect current allocations of the bytes in glyph_info_t's var1 and var2. */ + uint8_t allocated_var_bytes[8]; + const char *allocated_var_owner[8]; + HB_INTERNAL void allocate_var (unsigned int byte_i, unsigned int count, const char *owner); + HB_INTERNAL void deallocate_var (unsigned int byte_i, unsigned int count, const char *owner); + HB_INTERNAL void assert_var (unsigned int byte_i, unsigned int count, const char *owner); + HB_INTERNAL void deallocate_var_all (void); +#else + inline void deallocate_var_all (void) {} +#endif + /* Methods */ @@ -140,11 +149,6 @@ struct hb_buffer_t { { return len - idx; } inline unsigned int next_serial (void) { return serial++; } - HB_INTERNAL void allocate_var (unsigned int byte_i, unsigned int count, const char *owner); - HB_INTERNAL void deallocate_var (unsigned int byte_i, unsigned int count, const char *owner); - HB_INTERNAL void assert_var (unsigned int byte_i, unsigned int count, const char *owner); - HB_INTERNAL void deallocate_var_all (void); - HB_INTERNAL void add (hb_codepoint_t codepoint, unsigned int cluster); HB_INTERNAL void add_info (const hb_glyph_info_t &glyph_info); @@ -256,12 +260,18 @@ struct hb_buffer_t { #define HB_BUFFER_XALLOCATE_VAR(b, func, var, owner) \ b->func (offsetof (hb_glyph_info_t, var) - offsetof(hb_glyph_info_t, var1), \ sizeof (b->info[0].var), owner) +#ifndef NDEBUG #define HB_BUFFER_ALLOCATE_VAR(b, var) \ HB_BUFFER_XALLOCATE_VAR (b, allocate_var, var (), #var) #define HB_BUFFER_DEALLOCATE_VAR(b, var) \ HB_BUFFER_XALLOCATE_VAR (b, deallocate_var, var (), #var) #define HB_BUFFER_ASSERT_VAR(b, var) \ HB_BUFFER_XALLOCATE_VAR (b, assert_var, var (), #var) +#else +#define HB_BUFFER_ALLOCATE_VAR(b, var) +#define HB_BUFFER_DEALLOCATE_VAR(b, var) +#define HB_BUFFER_ASSERT_VAR(b, var) +#endif #endif /* HB_BUFFER_PRIVATE_HH */ diff --git a/src/hb-buffer.cc b/src/hb-buffer.cc index 5f320bd7e..ea2a70d5b 100644 --- a/src/hb-buffer.cc +++ b/src/hb-buffer.cc @@ -242,11 +242,11 @@ hb_buffer_t::clear (void) out_info = info; serial = 0; - memset (allocated_var_bytes, 0, sizeof allocated_var_bytes); - memset (allocated_var_owner, 0, sizeof allocated_var_owner); memset (context, 0, sizeof context); memset (context_len, 0, sizeof context_len); + + deallocate_var_all (); } void @@ -661,6 +661,7 @@ hb_buffer_t::guess_segment_properties (void) } +#ifndef NDEBUG static inline void dump_var_allocation (const hb_buffer_t *buffer) { @@ -728,6 +729,7 @@ void hb_buffer_t::deallocate_var_all (void) memset (allocated_var_bytes, 0, sizeof (allocated_var_bytes)); memset (allocated_var_owner, 0, sizeof (allocated_var_owner)); } +#endif /* NDEBUG */ /* Public API */