Hi, On Sun, Mar 11, 2018 at 08:43:32AM +0100, Salvatore Bonaccorso wrote: > CVE-2018-7999[0]: > | In libgraphite2 in graphite2 1.3.11, a NULL pointer dereference > | vulnerability was found in Segment.cpp during a dumbRendering > | operation, which may allow attackers to cause a denial of service or > | possibly have unspecified other impact via a crafted .ttf file. > > If you fix the vulnerability please also make sure to include the > CVE (Common Vulnerabilities & Exposures) id in your changelog entry. > > For further information see: > > [0] https://security-tracker.debian.org/tracker/CVE-2018-7999 > https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-7999 > [1] https://github.com/silnrsi/graphite/issues/22
upstream fix backported. Uploaded to sid. Merged this for jessie and stretch, too. See attached debdiffs. Want me to upload for a DSA? (for the jessie branch I also had a embarassing typo fix pending. Included. If I should remove that one I can, though, too) Regards, Rene
diff -Nru graphite2-1.3.10/debian/changelog graphite2-1.3.10/debian/changelog --- graphite2-1.3.10/debian/changelog 2017-05-06 13:20:52.000000000 +0200 +++ graphite2-1.3.10/debian/changelog 2018-03-11 13:44:49.000000000 +0100 @@ -1,3 +1,10 @@ +graphite2 (1.3.10-1+deb9u1) stretch-security; urgency=medium + + * backport upstream commit db132b4731a9b4c9534144ba3a18e65b390e9ff6 + to fix CVE-2018-7999 (closes: #892590) + + -- Rene Engelhard <r...@debian.org> Sun, 11 Mar 2018 13:44:49 +0100 + graphite2 (1.3.10-1) unstable; urgency=medium * New upstream version 1.3.10 diff -Nru graphite2-1.3.10/debian/patches/db132b4731a9b4c9534144ba3a18e65b390e9ff6.diff graphite2-1.3.10/debian/patches/db132b4731a9b4c9534144ba3a18e65b390e9ff6.diff --- graphite2-1.3.10/debian/patches/db132b4731a9b4c9534144ba3a18e65b390e9ff6.diff 1970-01-01 01:00:00.000000000 +0100 +++ graphite2-1.3.10/debian/patches/db132b4731a9b4c9534144ba3a18e65b390e9ff6.diff 2018-03-11 13:44:16.000000000 +0100 @@ -0,0 +1,221 @@ +diff --git a/include/graphite2/Font.h b/include/graphite2/Font.h +index efe2af9f..a4e35243 100644 +--- a/include/graphite2/Font.h ++++ b/include/graphite2/Font.h +@@ -56,7 +56,7 @@ GR2_API void gr_engine_version(int *nMajor, int *nMinor, int *nBugFix); + enum gr_face_options { + /** No preload, no cmap caching, fail if the graphite tables are invalid */ + gr_face_default = 0, +- /** Dumb rendering will be enabled if the graphite tables are invalid */ ++ /** Dumb rendering will be enabled if the graphite tables are invalid. DEPRECATED. */ + gr_face_dumbRendering = 1, + /** preload glyphs at construction time */ + gr_face_preloadGlyphs = 2, +diff --git a/src/GlyphCache.cpp b/src/GlyphCache.cpp +index c4ab807b..1acf7f98 100644 +--- a/src/GlyphCache.cpp ++++ b/src/GlyphCache.cpp +@@ -84,7 +84,7 @@ const SlantBox SlantBox::empty = {0,0,0,0}; + class GlyphCache::Loader + { + public: +- Loader(const Face & face, const bool dumb_font); //return result indicates success. Do not use if failed. ++ Loader(const Face & face); //return result indicates success. Do not use if failed. + + operator bool () const throw(); + unsigned short int units_per_em() const throw(); +@@ -115,7 +115,7 @@ class GlyphCache::Loader + + + GlyphCache::GlyphCache(const Face & face, const uint32 face_options) +-: _glyph_loader(new Loader(face, bool(face_options & gr_face_dumbRendering))), ++: _glyph_loader(new Loader(face)), + _glyphs(_glyph_loader && *_glyph_loader && _glyph_loader->num_glyphs() + ? grzeroalloc<const GlyphFace *>(_glyph_loader->num_glyphs()) : 0), + _boxes(_glyph_loader && _glyph_loader->has_boxes() && _glyph_loader->num_glyphs() +@@ -239,7 +239,7 @@ const GlyphFace *GlyphCache::glyph(unsigned short glyphid) const //result m + + + +-GlyphCache::Loader::Loader(const Face & face, const bool dumb_font) ++GlyphCache::Loader::Loader(const Face & face) + : _head(face, Tag::head), + _hhea(face, Tag::hhea), + _hmtx(face, Tag::hmtx), +@@ -265,52 +265,49 @@ GlyphCache::Loader::Loader(const Face & face, const bool dumb_font) + return; + } + +- if (!dumb_font) ++ if ((m_pGlat = Face::Table(face, Tag::Glat, 0x00030000)) == NULL ++ || (m_pGloc = Face::Table(face, Tag::Gloc)) == NULL ++ || m_pGloc.size() < 8) + { +- if ((m_pGlat = Face::Table(face, Tag::Glat, 0x00030000)) == NULL +- || (m_pGloc = Face::Table(face, Tag::Gloc)) == NULL +- || m_pGloc.size() < 8) +- { +- _head = Face::Table(); +- return; +- } +- const byte * p = m_pGloc; +- int version = be::read<uint32>(p); +- const uint16 flags = be::read<uint16>(p); +- _num_attrs = be::read<uint16>(p); +- // We can accurately calculate the number of attributed glyphs by +- // subtracting the length of the attribids array (numAttribs long if present) +- // and dividing by either 2 or 4 depending on shor or lonf format +- _long_fmt = flags & 1; +- int tmpnumgattrs = (m_pGloc.size() +- - (p - m_pGloc) +- - sizeof(uint16)*(flags & 0x2 ? _num_attrs : 0)) +- / (_long_fmt ? sizeof(uint32) : sizeof(uint16)) - 1; +- +- if (version >= 0x00020000 || tmpnumgattrs < 0 || tmpnumgattrs > 65535 +- || _num_attrs == 0 || _num_attrs > 0x3000 // is this hard limit appropriate? +- || _num_glyphs_graphics > tmpnumgattrs +- || m_pGlat.size() < 4) +- { +- _head = Face::Table(); +- return; +- } ++ _head = Face::Table(); ++ return; ++ } ++ const byte * p = m_pGloc; ++ int version = be::read<uint32>(p); ++ const uint16 flags = be::read<uint16>(p); ++ _num_attrs = be::read<uint16>(p); ++ // We can accurately calculate the number of attributed glyphs by ++ // subtracting the length of the attribids array (numAttribs long if present) ++ // and dividing by either 2 or 4 depending on shor or lonf format ++ _long_fmt = flags & 1; ++ int tmpnumgattrs = (m_pGloc.size() ++ - (p - m_pGloc) ++ - sizeof(uint16)*(flags & 0x2 ? _num_attrs : 0)) ++ / (_long_fmt ? sizeof(uint32) : sizeof(uint16)) - 1; ++ ++ if (version >= 0x00020000 || tmpnumgattrs < 0 || tmpnumgattrs > 65535 ++ || _num_attrs == 0 || _num_attrs > 0x3000 // is this hard limit appropriate? ++ || _num_glyphs_graphics > tmpnumgattrs ++ || m_pGlat.size() < 4) ++ { ++ _head = Face::Table(); ++ return; ++ } + +- _num_glyphs_attributes = static_cast<unsigned short>(tmpnumgattrs); +- p = m_pGlat; +- version = be::read<uint32>(p); +- if (version >= 0x00040000 || (version >= 0x00030000 && m_pGlat.size() < 8)) // reject Glat tables that are too new +- { +- _head = Face::Table(); +- return; +- } +- else if (version >= 0x00030000) +- { +- unsigned int glatflags = be::read<uint32>(p); +- _has_boxes = glatflags & 1; +- // delete this once the compiler is fixed +- _has_boxes = true; +- } ++ _num_glyphs_attributes = static_cast<unsigned short>(tmpnumgattrs); ++ p = m_pGlat; ++ version = be::read<uint32>(p); ++ if (version >= 0x00040000 || (version >= 0x00030000 && m_pGlat.size() < 8)) // reject Glat tables that are too new ++ { ++ _head = Face::Table(); ++ return; ++ } ++ else if (version >= 0x00030000) ++ { ++ unsigned int glatflags = be::read<uint32>(p); ++ _has_boxes = glatflags & 1; ++ // delete this once the compiler is fixed ++ _has_boxes = true; + } + } + +diff --git a/src/gr_face.cpp b/src/gr_face.cpp +index 65a4b117..e69c7fbe 100644 +--- a/src/gr_face.cpp ++++ b/src/gr_face.cpp +@@ -47,8 +47,7 @@ namespace + telemetry::category _misc_cat(face.tele.misc); + #endif + Face::Table silf(face, Tag::Silf, 0x00050000); +- if (silf) options &= ~gr_face_dumbRendering; +- else if (!(options & gr_face_dumbRendering)) ++ if (!silf) + return false; + + if (!face.readGlyphs(options)) +@@ -74,7 +73,7 @@ namespace + return true; + } + else +- return options & gr_face_dumbRendering; ++ return false; + } + } + +diff --git a/tests/featuremap/CMakeLists.txt b/tests/featuremap/CMakeLists.txt +index fc57f96c..a438f66c 100644 +--- a/tests/featuremap/CMakeLists.txt ++++ b/tests/featuremap/CMakeLists.txt +@@ -20,7 +20,7 @@ if (GRAPHITE2_ASAN) + endif (GRAPHITE2_ASAN) + target_link_libraries(featuremaptest graphite2 graphite2-base graphite2-segcache graphite2-base) + +-add_test(NAME featuremaptest COMMAND $<TARGET_FILE:featuremaptest> ${testing_SOURCE_DIR}/fonts/tiny.ttf) ++add_test(NAME featuremaptest COMMAND $<TARGET_FILE:featuremaptest> ${testing_SOURCE_DIR}/fonts/small.ttf) + set_tests_properties(featuremaptest PROPERTIES TIMEOUT 3) + if (GRAPHITE2_ASAN) + set_property(TEST featuremaptest APPEND PROPERTY ENVIRONMENT "ASAN_SYMBOLIZER_PATH=${ASAN_SYMBOLIZER}") +diff --git a/tests/featuremap/featuremaptest.cpp b/tests/featuremap/featuremaptest.cpp +index fcd9b873..a9aa497f 100644 +--- a/tests/featuremap/featuremaptest.cpp ++++ b/tests/featuremap/featuremaptest.cpp +@@ -243,7 +243,7 @@ template <class T> void testFeatTable(const T & table, const char * testName) + { + FeatureMap testFeatureMap; + dummyFace.replace_table(TtfUtil::Tag::Feat, &table, sizeof(T)); +- gr_face * face = gr_make_face_with_ops(&dummyFace, &face_handle::ops, gr_face_dumbRendering); ++ gr_face * face = gr_make_face_with_ops(&dummyFace, &face_handle::ops, 0); + if (!face) throw std::runtime_error("failed to load font"); + bool readStatus = testFeatureMap.readFeats(*face); + testAssert("readFeats", readStatus); +@@ -285,9 +285,8 @@ int main(int argc, char * argv[]) + // test a bad settings offset stradling the end of the table + FeatureMap testFeatureMap; + dummyFace.replace_table(TtfUtil::Tag::Feat, &testBadOffset, sizeof testBadOffset); +- face = gr_make_face_with_ops(&dummyFace, &face_handle::ops, gr_face_dumbRendering); +- bool readStatus = testFeatureMap.readFeats(*face); +- testAssert("fail gracefully on bad table", !readStatus); ++ face = gr_make_face_with_ops(&dummyFace, &face_handle::ops, 0); ++ testAssert("fail gracefully on bad table", !face); + } + catch (std::exception & e) + { +diff --git a/tests/vm/CMakeLists.txt b/tests/vm/CMakeLists.txt +index 4a0b8231..24fbd3b8 100644 +--- a/tests/vm/CMakeLists.txt ++++ b/tests/vm/CMakeLists.txt +@@ -41,7 +41,7 @@ if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux") + endif ("${CMAKE_BUILD_TYPE}" STREQUAL "Release") + endif (${CMAKE_SYSTEM_NAME} STREQUAL "Linux" OR ${CMAKE_SYSTEM_NAME} MATCHES "k.*BSD" OR ${CMAKE_SYSTEM_NAME} STREQUAL "GNU") + +-add_test(vm-test-call-threading vm-test-call ${testing_SOURCE_DIR}/fonts/tiny.ttf 1) ++add_test(vm-test-call-threading vm-test-call ${testing_SOURCE_DIR}/fonts/small.ttf 1) + set_tests_properties(vm-test-call-threading PROPERTIES + PASS_REGULAR_EXPRESSION "simple program size: 14 bytes.*result of program: 42" + FAIL_REGULAR_EXPRESSION "program terminated early;stack not empty") +@@ -51,7 +51,7 @@ if (GRAPHITE2_ASAN) + endif (GRAPHITE2_ASAN) + + if (${CMAKE_COMPILER_IS_GNUCXX}) +- add_test(vm-test-direct-threading vm-test-direct ${testing_SOURCE_DIR}/fonts/tiny.ttf 1) ++ add_test(vm-test-direct-threading vm-test-direct ${testing_SOURCE_DIR}/fonts/small.ttf 1) + set_tests_properties(vm-test-direct-threading PROPERTIES + PASS_REGULAR_EXPRESSION "simple program size: 14 bytes.*result of program: 42" + FAIL_REGULAR_EXPRESSION "program terminated early;stack not empty") diff -Nru graphite2-1.3.10/debian/patches/series graphite2-1.3.10/debian/patches/series --- graphite2-1.3.10/debian/patches/series 2017-05-06 13:20:52.000000000 +0200 +++ graphite2-1.3.10/debian/patches/series 2018-03-11 13:44:49.000000000 +0100 @@ -4,3 +4,4 @@ no-icons.diff test-timeout.diff reproducible-build.diff +db132b4731a9b4c9534144ba3a18e65b390e9ff6.diff
diff -Nru graphite2-1.3.10/debian/changelog graphite2-1.3.10/debian/changelog --- graphite2-1.3.10/debian/changelog 2017-06-14 23:13:46.000000000 +0200 +++ graphite2-1.3.10/debian/changelog 2018-03-11 13:51:44.000000000 +0100 @@ -1,3 +1,10 @@ +graphite2 (1.3.10-1~deb8u2) jessie-security; urgency=medium + + * backport upstream commit db132b4731a9b4c9534144ba3a18e65b390e9ff6 + to fix CVE-2018-7999 (closes: #892590) + + -- Rene Engelhard <r...@debian.org> Sun, 11 Mar 2018 13:51:44 +0100 + graphite2 (1.3.10-1~deb8u1) jessie-security; urgency=high * rebuild for jessie-security diff -Nru graphite2-1.3.10/debian/patches/db132b4731a9b4c9534144ba3a18e65b390e9ff6.diff graphite2-1.3.10/debian/patches/db132b4731a9b4c9534144ba3a18e65b390e9ff6.diff --- graphite2-1.3.10/debian/patches/db132b4731a9b4c9534144ba3a18e65b390e9ff6.diff 1970-01-01 01:00:00.000000000 +0100 +++ graphite2-1.3.10/debian/patches/db132b4731a9b4c9534144ba3a18e65b390e9ff6.diff 2018-03-11 13:50:58.000000000 +0100 @@ -0,0 +1,221 @@ +diff --git a/include/graphite2/Font.h b/include/graphite2/Font.h +index efe2af9f..a4e35243 100644 +--- a/include/graphite2/Font.h ++++ b/include/graphite2/Font.h +@@ -56,7 +56,7 @@ GR2_API void gr_engine_version(int *nMajor, int *nMinor, int *nBugFix); + enum gr_face_options { + /** No preload, no cmap caching, fail if the graphite tables are invalid */ + gr_face_default = 0, +- /** Dumb rendering will be enabled if the graphite tables are invalid */ ++ /** Dumb rendering will be enabled if the graphite tables are invalid. DEPRECATED. */ + gr_face_dumbRendering = 1, + /** preload glyphs at construction time */ + gr_face_preloadGlyphs = 2, +diff --git a/src/GlyphCache.cpp b/src/GlyphCache.cpp +index c4ab807b..1acf7f98 100644 +--- a/src/GlyphCache.cpp ++++ b/src/GlyphCache.cpp +@@ -84,7 +84,7 @@ const SlantBox SlantBox::empty = {0,0,0,0}; + class GlyphCache::Loader + { + public: +- Loader(const Face & face, const bool dumb_font); //return result indicates success. Do not use if failed. ++ Loader(const Face & face); //return result indicates success. Do not use if failed. + + operator bool () const throw(); + unsigned short int units_per_em() const throw(); +@@ -115,7 +115,7 @@ class GlyphCache::Loader + + + GlyphCache::GlyphCache(const Face & face, const uint32 face_options) +-: _glyph_loader(new Loader(face, bool(face_options & gr_face_dumbRendering))), ++: _glyph_loader(new Loader(face)), + _glyphs(_glyph_loader && *_glyph_loader && _glyph_loader->num_glyphs() + ? grzeroalloc<const GlyphFace *>(_glyph_loader->num_glyphs()) : 0), + _boxes(_glyph_loader && _glyph_loader->has_boxes() && _glyph_loader->num_glyphs() +@@ -239,7 +239,7 @@ const GlyphFace *GlyphCache::glyph(unsigned short glyphid) const //result m + + + +-GlyphCache::Loader::Loader(const Face & face, const bool dumb_font) ++GlyphCache::Loader::Loader(const Face & face) + : _head(face, Tag::head), + _hhea(face, Tag::hhea), + _hmtx(face, Tag::hmtx), +@@ -265,52 +265,49 @@ GlyphCache::Loader::Loader(const Face & face, const bool dumb_font) + return; + } + +- if (!dumb_font) ++ if ((m_pGlat = Face::Table(face, Tag::Glat, 0x00030000)) == NULL ++ || (m_pGloc = Face::Table(face, Tag::Gloc)) == NULL ++ || m_pGloc.size() < 8) + { +- if ((m_pGlat = Face::Table(face, Tag::Glat, 0x00030000)) == NULL +- || (m_pGloc = Face::Table(face, Tag::Gloc)) == NULL +- || m_pGloc.size() < 8) +- { +- _head = Face::Table(); +- return; +- } +- const byte * p = m_pGloc; +- int version = be::read<uint32>(p); +- const uint16 flags = be::read<uint16>(p); +- _num_attrs = be::read<uint16>(p); +- // We can accurately calculate the number of attributed glyphs by +- // subtracting the length of the attribids array (numAttribs long if present) +- // and dividing by either 2 or 4 depending on shor or lonf format +- _long_fmt = flags & 1; +- int tmpnumgattrs = (m_pGloc.size() +- - (p - m_pGloc) +- - sizeof(uint16)*(flags & 0x2 ? _num_attrs : 0)) +- / (_long_fmt ? sizeof(uint32) : sizeof(uint16)) - 1; +- +- if (version >= 0x00020000 || tmpnumgattrs < 0 || tmpnumgattrs > 65535 +- || _num_attrs == 0 || _num_attrs > 0x3000 // is this hard limit appropriate? +- || _num_glyphs_graphics > tmpnumgattrs +- || m_pGlat.size() < 4) +- { +- _head = Face::Table(); +- return; +- } ++ _head = Face::Table(); ++ return; ++ } ++ const byte * p = m_pGloc; ++ int version = be::read<uint32>(p); ++ const uint16 flags = be::read<uint16>(p); ++ _num_attrs = be::read<uint16>(p); ++ // We can accurately calculate the number of attributed glyphs by ++ // subtracting the length of the attribids array (numAttribs long if present) ++ // and dividing by either 2 or 4 depending on shor or lonf format ++ _long_fmt = flags & 1; ++ int tmpnumgattrs = (m_pGloc.size() ++ - (p - m_pGloc) ++ - sizeof(uint16)*(flags & 0x2 ? _num_attrs : 0)) ++ / (_long_fmt ? sizeof(uint32) : sizeof(uint16)) - 1; ++ ++ if (version >= 0x00020000 || tmpnumgattrs < 0 || tmpnumgattrs > 65535 ++ || _num_attrs == 0 || _num_attrs > 0x3000 // is this hard limit appropriate? ++ || _num_glyphs_graphics > tmpnumgattrs ++ || m_pGlat.size() < 4) ++ { ++ _head = Face::Table(); ++ return; ++ } + +- _num_glyphs_attributes = static_cast<unsigned short>(tmpnumgattrs); +- p = m_pGlat; +- version = be::read<uint32>(p); +- if (version >= 0x00040000 || (version >= 0x00030000 && m_pGlat.size() < 8)) // reject Glat tables that are too new +- { +- _head = Face::Table(); +- return; +- } +- else if (version >= 0x00030000) +- { +- unsigned int glatflags = be::read<uint32>(p); +- _has_boxes = glatflags & 1; +- // delete this once the compiler is fixed +- _has_boxes = true; +- } ++ _num_glyphs_attributes = static_cast<unsigned short>(tmpnumgattrs); ++ p = m_pGlat; ++ version = be::read<uint32>(p); ++ if (version >= 0x00040000 || (version >= 0x00030000 && m_pGlat.size() < 8)) // reject Glat tables that are too new ++ { ++ _head = Face::Table(); ++ return; ++ } ++ else if (version >= 0x00030000) ++ { ++ unsigned int glatflags = be::read<uint32>(p); ++ _has_boxes = glatflags & 1; ++ // delete this once the compiler is fixed ++ _has_boxes = true; + } + } + +diff --git a/src/gr_face.cpp b/src/gr_face.cpp +index 65a4b117..e69c7fbe 100644 +--- a/src/gr_face.cpp ++++ b/src/gr_face.cpp +@@ -47,8 +47,7 @@ namespace + telemetry::category _misc_cat(face.tele.misc); + #endif + Face::Table silf(face, Tag::Silf, 0x00050000); +- if (silf) options &= ~gr_face_dumbRendering; +- else if (!(options & gr_face_dumbRendering)) ++ if (!silf) + return false; + + if (!face.readGlyphs(options)) +@@ -74,7 +73,7 @@ namespace + return true; + } + else +- return options & gr_face_dumbRendering; ++ return false; + } + } + +diff --git a/tests/featuremap/CMakeLists.txt b/tests/featuremap/CMakeLists.txt +index fc57f96c..a438f66c 100644 +--- a/tests/featuremap/CMakeLists.txt ++++ b/tests/featuremap/CMakeLists.txt +@@ -20,7 +20,7 @@ if (GRAPHITE2_ASAN) + endif (GRAPHITE2_ASAN) + target_link_libraries(featuremaptest graphite2 graphite2-base graphite2-segcache graphite2-base) + +-add_test(NAME featuremaptest COMMAND $<TARGET_FILE:featuremaptest> ${testing_SOURCE_DIR}/fonts/tiny.ttf) ++add_test(NAME featuremaptest COMMAND $<TARGET_FILE:featuremaptest> ${testing_SOURCE_DIR}/fonts/small.ttf) + set_tests_properties(featuremaptest PROPERTIES TIMEOUT 3) + if (GRAPHITE2_ASAN) + set_property(TEST featuremaptest APPEND PROPERTY ENVIRONMENT "ASAN_SYMBOLIZER_PATH=${ASAN_SYMBOLIZER}") +diff --git a/tests/featuremap/featuremaptest.cpp b/tests/featuremap/featuremaptest.cpp +index fcd9b873..a9aa497f 100644 +--- a/tests/featuremap/featuremaptest.cpp ++++ b/tests/featuremap/featuremaptest.cpp +@@ -243,7 +243,7 @@ template <class T> void testFeatTable(const T & table, const char * testName) + { + FeatureMap testFeatureMap; + dummyFace.replace_table(TtfUtil::Tag::Feat, &table, sizeof(T)); +- gr_face * face = gr_make_face_with_ops(&dummyFace, &face_handle::ops, gr_face_dumbRendering); ++ gr_face * face = gr_make_face_with_ops(&dummyFace, &face_handle::ops, 0); + if (!face) throw std::runtime_error("failed to load font"); + bool readStatus = testFeatureMap.readFeats(*face); + testAssert("readFeats", readStatus); +@@ -285,9 +285,8 @@ int main(int argc, char * argv[]) + // test a bad settings offset stradling the end of the table + FeatureMap testFeatureMap; + dummyFace.replace_table(TtfUtil::Tag::Feat, &testBadOffset, sizeof testBadOffset); +- face = gr_make_face_with_ops(&dummyFace, &face_handle::ops, gr_face_dumbRendering); +- bool readStatus = testFeatureMap.readFeats(*face); +- testAssert("fail gracefully on bad table", !readStatus); ++ face = gr_make_face_with_ops(&dummyFace, &face_handle::ops, 0); ++ testAssert("fail gracefully on bad table", !face); + } + catch (std::exception & e) + { +diff --git a/tests/vm/CMakeLists.txt b/tests/vm/CMakeLists.txt +index 4a0b8231..24fbd3b8 100644 +--- a/tests/vm/CMakeLists.txt ++++ b/tests/vm/CMakeLists.txt +@@ -41,7 +41,7 @@ if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux") + endif ("${CMAKE_BUILD_TYPE}" STREQUAL "Release") + endif (${CMAKE_SYSTEM_NAME} STREQUAL "Linux" OR ${CMAKE_SYSTEM_NAME} MATCHES "k.*BSD" OR ${CMAKE_SYSTEM_NAME} STREQUAL "GNU") + +-add_test(vm-test-call-threading vm-test-call ${testing_SOURCE_DIR}/fonts/tiny.ttf 1) ++add_test(vm-test-call-threading vm-test-call ${testing_SOURCE_DIR}/fonts/small.ttf 1) + set_tests_properties(vm-test-call-threading PROPERTIES + PASS_REGULAR_EXPRESSION "simple program size: 14 bytes.*result of program: 42" + FAIL_REGULAR_EXPRESSION "program terminated early;stack not empty") +@@ -51,7 +51,7 @@ if (GRAPHITE2_ASAN) + endif (GRAPHITE2_ASAN) + + if (${CMAKE_COMPILER_IS_GNUCXX}) +- add_test(vm-test-direct-threading vm-test-direct ${testing_SOURCE_DIR}/fonts/tiny.ttf 1) ++ add_test(vm-test-direct-threading vm-test-direct ${testing_SOURCE_DIR}/fonts/small.ttf 1) + set_tests_properties(vm-test-direct-threading PROPERTIES + PASS_REGULAR_EXPRESSION "simple program size: 14 bytes.*result of program: 42" + FAIL_REGULAR_EXPRESSION "program terminated early;stack not empty") diff -Nru graphite2-1.3.10/debian/patches/do-not-require-ss2.diff graphite2-1.3.10/debian/patches/do-not-require-ss2.diff --- graphite2-1.3.10/debian/patches/do-not-require-ss2.diff 2017-05-06 13:19:45.000000000 +0200 +++ graphite2-1.3.10/debian/patches/do-not-require-ss2.diff 1970-01-01 01:00:00.000000000 +0100 @@ -1,23 +0,0 @@ -diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt -index 08e1c8f..4f1e7e5 100644 ---- a/src/CMakeLists.txt -+++ b/src/CMakeLists.txt -@@ -111,9 +111,6 @@ if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux") - COMPILE_FLAGS "-Wall -Wextra -Wno-unknown-pragmas -Wendif-labels -Wshadow -Wctor-dtor-privacy -Wnon-virtual-dtor -fno-rtti -fno-exceptions -fvisibility=hidden -fvisibility-inlines-hidden -fno-stack-protector" - LINK_FLAGS "-nodefaultlibs ${GRAPHITE_LINK_FLAGS}" - LINKER_LANGUAGE C) -- if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "x86|i.86") -- add_definitions(-mfpmath=sse -msse2) -- endif (${CMAKE_SYSTEM_PROCESSOR} MATCHES "x86|i.86") - if (CMAKE_COMPILER_IS_GNUCXX) - add_definitions(-Wdouble-promotion) - endif (CMAKE_COMPILER_IS_GNUCXX) -@@ -138,7 +135,7 @@ endif (${CMAKE_SYSTEM_NAME} STREQUAL "Linux") - - if (${CMAKE_SYSTEM_NAME} STREQUAL "Darwin") - set_target_properties(graphite2 PROPERTIES -- COMPILE_FLAGS "-Wall -Wextra -Wno-unknown-pragmas -Wimplicit-fallthrough -Wendif-labels -Wshadow -Wno-ctor-dtor-privacy -Wno-non-virtual-dtor -fno-rtti -fno-exceptions -fvisibility=hidden -fvisibility-inlines-hidden -fno-stack-protector -mfpmath=sse -msse2" -+ COMPILE_FLAGS "-Wall -Wextra -Wno-unknown-pragmas -Wimplicit-fallthrough -Wendif-labels -Wshadow -Wno-ctor-dtor-privacy -Wno-non-virtual-dtor -fno-rtti -fno-exceptions -fvisibility=hidden -fvisibility-inlines-hidden -fno-stack-protector" - LINK_FLAGS "-nodefaultlibs" - LINKER_LANGUAGE C) - target_link_libraries(graphite2 c) diff -Nru graphite2-1.3.10/debian/patches/do-not-require-sse2.diff graphite2-1.3.10/debian/patches/do-not-require-sse2.diff --- graphite2-1.3.10/debian/patches/do-not-require-sse2.diff 1970-01-01 01:00:00.000000000 +0100 +++ graphite2-1.3.10/debian/patches/do-not-require-sse2.diff 2018-03-11 13:50:52.000000000 +0100 @@ -0,0 +1,23 @@ +diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt +index 08e1c8f..4f1e7e5 100644 +--- a/src/CMakeLists.txt ++++ b/src/CMakeLists.txt +@@ -111,9 +111,6 @@ if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux") + COMPILE_FLAGS "-Wall -Wextra -Wno-unknown-pragmas -Wendif-labels -Wshadow -Wctor-dtor-privacy -Wnon-virtual-dtor -fno-rtti -fno-exceptions -fvisibility=hidden -fvisibility-inlines-hidden -fno-stack-protector" + LINK_FLAGS "-nodefaultlibs ${GRAPHITE_LINK_FLAGS}" + LINKER_LANGUAGE C) +- if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "x86|i.86") +- add_definitions(-mfpmath=sse -msse2) +- endif (${CMAKE_SYSTEM_PROCESSOR} MATCHES "x86|i.86") + if (CMAKE_COMPILER_IS_GNUCXX) + add_definitions(-Wdouble-promotion) + endif (CMAKE_COMPILER_IS_GNUCXX) +@@ -138,7 +135,7 @@ endif (${CMAKE_SYSTEM_NAME} STREQUAL "Linux") + + if (${CMAKE_SYSTEM_NAME} STREQUAL "Darwin") + set_target_properties(graphite2 PROPERTIES +- COMPILE_FLAGS "-Wall -Wextra -Wno-unknown-pragmas -Wimplicit-fallthrough -Wendif-labels -Wshadow -Wno-ctor-dtor-privacy -Wno-non-virtual-dtor -fno-rtti -fno-exceptions -fvisibility=hidden -fvisibility-inlines-hidden -fno-stack-protector -mfpmath=sse -msse2" ++ COMPILE_FLAGS "-Wall -Wextra -Wno-unknown-pragmas -Wimplicit-fallthrough -Wendif-labels -Wshadow -Wno-ctor-dtor-privacy -Wno-non-virtual-dtor -fno-rtti -fno-exceptions -fvisibility=hidden -fvisibility-inlines-hidden -fno-stack-protector" + LINK_FLAGS "-nodefaultlibs" + LINKER_LANGUAGE C) + target_link_libraries(graphite2 c) diff -Nru graphite2-1.3.10/debian/patches/series graphite2-1.3.10/debian/patches/series --- graphite2-1.3.10/debian/patches/series 2017-05-06 13:20:52.000000000 +0200 +++ graphite2-1.3.10/debian/patches/series 2018-03-11 13:50:58.000000000 +0100 @@ -1,6 +1,7 @@ -do-not-require-ss2.diff +do-not-require-sse2.diff ffloat-store.diff non-linux.diff no-icons.diff test-timeout.diff reproducible-build.diff +db132b4731a9b4c9534144ba3a18e65b390e9ff6.diff