From 5916afc208e1b62bc915c51f5a2e05e26098bdba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= Date: Mon, 23 Jul 2018 16:27:19 +0100 Subject: [PATCH] Revert "rhbz#1602527 covscan warnings" This reverts commit f3b71e73bb6571e2c3db76ec636ffbc80c1ca35f. --- ...-Fix-memory-leaks-on-realloc-failure.patch | 45 --- 0001-Fix-stricter-gcc-warnings.patch | 268 ------------------ ...2527-CTOR_DTOR_LEAK-coverity-warning.patch | 31 -- ...2527-add-comment-to-silence-leaked_s.patch | 28 -- ...602527-resourceLeak-cppcheck-warning.patch | 24 -- graphite2.spec | 17 +- 6 files changed, 1 insertion(+), 412 deletions(-) delete mode 100644 0001-Fix-memory-leaks-on-realloc-failure.patch delete mode 100644 0001-Fix-stricter-gcc-warnings.patch delete mode 100644 0001-Related-rhbz-1602527-CTOR_DTOR_LEAK-coverity-warning.patch delete mode 100644 0001-Related-rhbz-1602527-add-comment-to-silence-leaked_s.patch delete mode 100644 0001-Related-rhbz-1602527-resourceLeak-cppcheck-warning.patch diff --git a/0001-Fix-memory-leaks-on-realloc-failure.patch b/0001-Fix-memory-leaks-on-realloc-failure.patch deleted file mode 100644 index 06adf83..0000000 --- a/0001-Fix-memory-leaks-on-realloc-failure.patch +++ /dev/null @@ -1,45 +0,0 @@ -From 940d82895512737db2ad6b7698d8d7d140356a7e Mon Sep 17 00:00:00 2001 -From: Tim Eves -Date: Thu, 16 Nov 2017 17:12:32 +0700 -Subject: [PATCH] Fix memory leaks on realloc failure - -Make sure the original buffer is cleaned up if realoc fails. ---- - src/Code.cpp | 6 +++++- - src/Pass.cpp | 3 ++- - 2 files changed, 7 insertions(+), 2 deletions(-) - -diff --git a/src/Code.cpp b/src/Code.cpp -index 92ba923..a5ec04e 100644 ---- a/src/Code.cpp -+++ b/src/Code.cpp -@@ -219,7 +219,11 @@ Machine::Code::Code(bool is_constraint, const byte * bytecode_begin, const byte - if (_out) - *_out += total_sz; - else -- _code = static_cast(realloc(_code, total_sz)); -+ { -+ instr * const old_code = _code; -+ _code = static_cast(realloc(_code, total_sz)); -+ if (!_code) free(old_code); -+ } - _data = reinterpret_cast(_code + (_instr_count+1)); - - if (!_code) -diff --git a/src/Pass.cpp b/src/Pass.cpp -index ae0e9df..1d45bf8 100644 ---- a/src/Pass.cpp -+++ b/src/Pass.cpp -@@ -273,7 +273,8 @@ bool Pass::readRules(const byte * rule_map, const size_t num_entries, - byte * moved_progs = static_cast(realloc(m_progs, prog_pool_free - m_progs)); - if (e.test(!moved_progs, E_OUTOFMEM)) - { -- if (prog_pool_free - m_progs == 0) m_progs = 0; -+ free(m_progs); -+ m_progs = 0; - return face.error(e); - } - --- -2.17.0 - diff --git a/0001-Fix-stricter-gcc-warnings.patch b/0001-Fix-stricter-gcc-warnings.patch deleted file mode 100644 index 942b8c0..0000000 --- a/0001-Fix-stricter-gcc-warnings.patch +++ /dev/null @@ -1,268 +0,0 @@ -From cf872f3053dd5b0af7b3b4f583bcce9d5bb953c2 Mon Sep 17 00:00:00 2001 -From: Tim Eves -Date: Wed, 5 Jul 2017 21:27:03 +0700 -Subject: [PATCH] Fix stricter gcc warnings - -Also get rid of auto_ptr from comparerenderer ---- - src/gr_logging.cpp | 2 +- - tests/comparerenderer/RenderedLine.h | 14 ++++++-------- - tests/comparerenderer/Gr2Renderer.h | 166 ++++++++++++++-------------- - -diff --git a/src/gr_logging.cpp b/src/gr_logging.cpp -index 3e453ba..b75a394 100644 ---- a/src/gr_logging.cpp -+++ b/src/gr_logging.cpp -@@ -214,7 +214,7 @@ json & graphite2::operator << (json & j, const dslot & ds) throw() - j << "user" << json::flat << json::array; - for (int n = 0; n!= seg.numAttrs(); ++n) - j << s.userAttrs()[n]; -- j << json::close; -+ j << json::close; - if (s.firstChild()) - { - j << "children" << json::flat << json::array; - -diff --git a/tests/comparerenderer/RenderedLine.h b/tests/comparerenderer/RenderedLine.h -index fb8398d..649fb63 100644 ---- a/tests/comparerenderer/RenderedLine.h -+++ b/tests/comparerenderer/RenderedLine.h -@@ -99,9 +99,9 @@ class RenderedLine - { - public: - RenderedLine() -- : m_text(NULL), m_numGlyphs(0), m_advance(0), m_glyphs(NULL) -+ : m_numGlyphs(0), m_advance(0), m_glyphs(NULL) - {} -- RenderedLine(std::string *text, size_t numGlyphs, float adv = 0.0f) -+ RenderedLine(const std::string & text, size_t numGlyphs, float adv = 0.0f) - : m_text(text), m_numGlyphs(numGlyphs), m_advance(adv), m_glyphs(new GlyphInfo[numGlyphs]) - { - } -@@ -109,12 +109,11 @@ class RenderedLine - { - delete [] m_glyphs; - m_glyphs = NULL; -- delete m_text; - } - void setAdvance(float newAdv) { m_advance = newAdv; } - void dump(FILE * f) - { -- fprintf(f, "{\"%s\" : [", m_text->c_str()); -+ fprintf(f, "{\"%s\" : [", m_text.c_str()); - for (size_t i = 0; i < m_numGlyphs; i++) - { - //fprintf(f, "%2u", (unsigned int)i); -@@ -157,9 +156,8 @@ class RenderedLine - return true; - } - private: -- size_t m_numGlyphs; -- float m_advance; -+ size_t m_numGlyphs; -+ float m_advance; - GlyphInfo * m_glyphs; -- std::string * m_text; -+ std::string m_text; - }; -- --- -diff --git a/tests/comparerenderer/Gr2Renderer.h b/tests/comparerenderer/Gr2Renderer.h -index dfce31b..8aaeddc 100644 ---- a/tests/comparerenderer/Gr2Renderer.h -+++ b/tests/comparerenderer/Gr2Renderer.h -@@ -22,6 +22,7 @@ - #pragma once - - #include -+#include - #include - #include - #include "Renderer.h" -@@ -30,99 +31,102 @@ - #include - #include - --class Gr2Face : private std::auto_ptr -+ -+using gr_face_ptr = std::unique_ptr; -+using gr_font_ptr = std::unique_ptr; -+using gr_feature_val_ptr = std::unique_ptr; -+using gr_segment_ptr = std::unique_ptr; -+ -+class Gr2Face : public gr_face_ptr - { - public: - Gr2Face(const char * fontFile, const std::string & logPath, const bool demand_load) -- : std::auto_ptr(gr_make_file_face(fontFile, !demand_load ? gr_face_preloadGlyphs : gr_face_default)) -+ : gr_face_ptr(gr_make_file_face(fontFile, -+ !demand_load ? gr_face_preloadGlyphs : gr_face_default), -+ &gr_face_destroy) - { -- if (!get()) return; -- -- if (logPath.size()) gr_start_logging(get(), logPath.c_str()); -+ if (*this && logPath.size()) gr_start_logging(get(), logPath.c_str()); - } - -+ Gr2Face(Gr2Face && f): gr_face_ptr(std::move(f)) {} -+ - ~Gr2Face() throw() - { -- gr_stop_logging(get()); -- gr_face_destroy(get()); -- release(); -+ gr_stop_logging(get()); - } -- -- operator bool () const { return get() != 0; } -- operator gr_face* () const { return get(); } - }; - - - class Gr2Renderer : public Renderer - { - public: -- Gr2Renderer(Gr2Face & face, int fontSize, int textDir, FeatureParser * features) -- : m_rtl(textDir), -- m_grFace(face), -- m_grFont(0), -- m_grFeatures(0) -- { -- if (m_grFace) -- { -- m_grFont = gr_make_font(static_cast(fontSize), m_grFace); -- if (features) -- { -- m_grFeatures = gr_face_featureval_for_lang(m_grFace, features->langId()); -- for (size_t i = 0; i < features->featureCount(); i++) -- { -- const gr_feature_ref * ref = gr_face_find_fref(m_grFace, features->featureId(i)); -- if (ref) -- gr_fref_set_feature_value(ref, features->featureSValue(i), m_grFeatures); -- } -- } -- else -- { -- m_grFeatures = gr_face_featureval_for_lang(m_grFace, 0); -- } -- } -- m_name = "graphite2"; -- } -- virtual ~Gr2Renderer() -- { -- gr_featureval_destroy(m_grFeatures); -- gr_font_destroy(m_grFont); -- } -- -- virtual void renderText(const char * utf8, size_t length, RenderedLine * result, FILE *log) -- { -- const void * pError = NULL; -- if (!m_grFace) -- { -- new(result) RenderedLine(); -- return; -- } -- size_t numCodePoints = gr_count_unicode_characters(gr_utf8, -- reinterpret_cast(utf8), reinterpret_cast(utf8 + length), &pError); -- if (pError) -- fprintf(stderr, "Invalid Unicode pos %d\n", static_cast(reinterpret_cast(pError) - utf8)); -- gr_segment* pSeg = gr_make_seg(m_grFont, m_grFace, 0u, m_grFeatures, gr_utf8, utf8, numCodePoints, m_rtl ? 1 : 0); -- if (!pSeg) -- { -- fprintf(stderr, "Failed to create segment\n"); -- new(result) RenderedLine(0, .0f); -- return; -- } -- std::string *s = new std::string(utf8, length); -- RenderedLine * renderedLine = new(result) RenderedLine(s, gr_seg_n_slots(pSeg), -- gr_seg_advance_X(pSeg)); -- int i = 0; -- for (const gr_slot* s = gr_seg_first_slot(pSeg); s; -- s = gr_slot_next_in_segment(s), ++i) -- (*renderedLine)[i].set(gr_slot_gid(s), gr_slot_origin_X(s), -- gr_slot_origin_Y(s), gr_slot_before(s), -- gr_slot_after(s)); -- gr_seg_destroy(pSeg); -- } -- virtual const char * name() const { return m_name; } --private: -- int m_rtl; -- Gr2Face m_grFace; -- gr_font * m_grFont; -- gr_feature_val * m_grFeatures; -- const char * m_name; --}; -+ Gr2Renderer(Gr2Face & face, int fontSize, bool rtl, FeatureParser * features) -+ : m_rtl(rtl), -+ m_grFace(std::move(face)), -+ m_grFont(nullptr, &gr_font_destroy), -+ m_grFeatures(nullptr, gr_featureval_destroy), -+ m_name("graphite2") -+ { -+ if (!m_grFace) -+ return; -+ -+ m_grFont.reset(gr_make_font(static_cast(fontSize), m_grFace.get())); -+ if (features) -+ { -+ m_grFeatures.reset(gr_face_featureval_for_lang(m_grFace.get(), features->langId())); -+ for (size_t i = 0; i < features->featureCount(); i++) -+ { -+ const gr_feature_ref * ref = gr_face_find_fref(m_grFace.get(), features->featureId(i)); -+ if (ref) -+ gr_fref_set_feature_value(ref, features->featureSValue(i), m_grFeatures.get()); -+ } -+ } -+ else -+ { -+ m_grFeatures.reset(gr_face_featureval_for_lang(m_grFace.get(), 0)); -+ } -+ } -+ -+ virtual void renderText(const char * utf8, size_t length, RenderedLine * result, FILE *log) -+ { -+ const void * pError = NULL; -+ if (!m_grFace) -+ { -+ new (result) RenderedLine(); -+ return; -+ } -+ size_t numCodePoints = gr_count_unicode_characters(gr_utf8, utf8, utf8 + length, &pError); -+ if (pError) -+ std::cerr << "Invalid Unicode pos" << int(static_cast(pError) - utf8) << std::endl; -+ -+ gr_segment_ptr pSeg = gr_segment_ptr( -+ gr_make_seg(m_grFont.get(), m_grFace.get(), 0u, m_grFeatures.get(), -+ gr_utf8, utf8, numCodePoints, m_rtl), -+ &gr_seg_destroy); -+ -+ if (!pSeg) -+ { -+ std::cerr << "Failed to create segment" << std::endl; -+ new (result) RenderedLine(0, .0f); -+ return; -+ } -+ -+ RenderedLine * renderedLine = new (result) RenderedLine(std::string(utf8, length), gr_seg_n_slots(pSeg.get()), -+ gr_seg_advance_X(pSeg.get())); -+ const gr_slot * s = gr_seg_first_slot(pSeg.get()); -+ for (int i = 0; s; ++i) -+ { -+ (*renderedLine)[i].set(gr_slot_gid(s), gr_slot_origin_X(s), -+ gr_slot_origin_Y(s), gr_slot_before(s), -+ gr_slot_after(s)); -+ s = gr_slot_next_in_segment(s); -+ } -+ } -+ virtual const char * name() const { return m_name; } -+ private: -+ Gr2Face m_grFace; -+ const char * const m_name; -+ bool m_rtl; -+ gr_font_ptr m_grFont; -+ gr_feature_val_ptr m_grFeatures; -+ }; --- -2.17.0 - diff --git a/0001-Related-rhbz-1602527-CTOR_DTOR_LEAK-coverity-warning.patch b/0001-Related-rhbz-1602527-CTOR_DTOR_LEAK-coverity-warning.patch deleted file mode 100644 index e5aaeaa..0000000 --- a/0001-Related-rhbz-1602527-CTOR_DTOR_LEAK-coverity-warning.patch +++ /dev/null @@ -1,31 +0,0 @@ -From cf661dac92704ed738252f29b0925f15aee85609 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= -Date: Thu, 19 Jul 2018 17:01:38 +0100 -Subject: [PATCH] Related: rhbz#1602527 CTOR_DTOR_LEAK coverity warning - -tests/featuremap/featuremaptest.cpp:180: alloc_new: Allocating memory by calling "new char[font_size]". -tests/featuremap/featuremaptest.cpp:180: var_assign: Assigning: "this->_header" = "new char[font_size]". -tests/featuremap/featuremaptest.cpp:180: ctor_dtor_leak: The constructor allocates field "_header" of "face_handle" but there is no destructor. ---- - tests/featuremap/featuremaptest.cpp | 5 +++++ - 1 file changed, 5 insertions(+) - -diff --git a/tests/featuremap/featuremaptest.cpp b/tests/featuremap/featuremaptest.cpp -index afbf339..901ea39 100644 ---- a/tests/featuremap/featuremaptest.cpp -+++ b/tests/featuremap/featuremaptest.cpp -@@ -187,6 +187,11 @@ public: - _dir = _header + dir_off; - } - -+ ~face_handle() -+ { -+ delete [] _header; -+ } -+ - void replace_table(const TtfUtil::Tag name, const void * const data, size_t len) throw() { - _tables[name] = std::make_pair(data, len); - } --- -2.17.0 - diff --git a/0001-Related-rhbz-1602527-add-comment-to-silence-leaked_s.patch b/0001-Related-rhbz-1602527-add-comment-to-silence-leaked_s.patch deleted file mode 100644 index 9b472eb..0000000 --- a/0001-Related-rhbz-1602527-add-comment-to-silence-leaked_s.patch +++ /dev/null @@ -1,28 +0,0 @@ -From b94a1ab2983293cb666b5dca8012b993eb4947b5 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= -Date: Mon, 23 Jul 2018 14:54:58 +0100 -Subject: [PATCH] Related: rhbz#1602527 add comment to silence leaked_storage - for 'glyphs' - ---- - src/GlyphCache.cpp | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/src/GlyphCache.cpp b/src/GlyphCache.cpp -index 6d050ce..282bdc1 100644 ---- a/src/GlyphCache.cpp -+++ b/src/GlyphCache.cpp -@@ -164,6 +164,10 @@ GlyphCache::GlyphCache(const Face & face, const uint32 face_options) - } - delete _glyph_loader; - _glyph_loader = 0; -+ // coverity[leaked_storage : FALSE] - calling read_glyph on index 0 saved -+ // glyphs as _glyphs[0]. Setting _glyph_loader to nullptr here flags that -+ // the dtor needs to call delete[] on _glyphs[0] to release what was allocated -+ // as glyphs - } - - if (_glyphs && glyph(0) == 0) --- -2.17.0 - diff --git a/0001-Related-rhbz-1602527-resourceLeak-cppcheck-warning.patch b/0001-Related-rhbz-1602527-resourceLeak-cppcheck-warning.patch deleted file mode 100644 index c666c9c..0000000 --- a/0001-Related-rhbz-1602527-resourceLeak-cppcheck-warning.patch +++ /dev/null @@ -1,24 +0,0 @@ -From 0f04e6cbbb5ecda6356a5a1756f108154945cbed Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= -Date: Mon, 23 Jul 2018 12:02:13 +0100 -Subject: [PATCH] Related: rhbz#1602527 resourceLeak cppcheck warning - ---- - tests/comparerenderer/CompareRenderer.cpp | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/tests/comparerenderer/CompareRenderer.cpp b/tests/comparerenderer/CompareRenderer.cpp -index 31b185a..a848e65 100644 ---- a/tests/comparerenderer/CompareRenderer.cpp -+++ b/tests/comparerenderer/CompareRenderer.cpp -@@ -371,6 +371,7 @@ int main(int argc, char ** argv) - { - fprintf(stderr, "Please specify at least 1 renderer\n"); - showOptions(); -+ if (rendererOptions[OptLogFile].exists()) fclose(log); - return -3; - } - --- -2.17.0 - diff --git a/graphite2.spec b/graphite2.spec index 3a35057..f2ace0c 100644 --- a/graphite2.spec +++ b/graphite2.spec @@ -1,6 +1,6 @@ Name: graphite2 Version: 1.3.10 -Release: 7%{?dist} +Release: 6%{?dist} Summary: Font rendering capabilities for complex non-Roman writing systems Group: Development/Tools @@ -9,13 +9,6 @@ URL: https://sourceforge.net/projects/silgraphite/ Source0: https://downloads.sourceforge.net/project/silgraphite/graphite2//%{name}-%{version}.tgz Patch0: graphite-arm-nodefaultlibs.patch Patch1: graphite2-1.2.0-cmakepath.patch -# backports for warnings -Patch2: 0001-Fix-stricter-gcc-warnings.patch -Patch3: 0001-Fix-memory-leaks-on-realloc-failure.patch -# https://github.com/caolanm/graphite/commits/covscan_warning_1 fix/silence covscan warnings -Patch4: 0001-Related-rhbz-1602527-CTOR_DTOR_LEAK-coverity-warning.patch -Patch5: 0001-Related-rhbz-1602527-resourceLeak-cppcheck-warning.patch -Patch6: 0001-Related-rhbz-1602527-add-comment-to-silence-leaked_s.patch BuildRequires: gcc BuildRequires: gcc-c++ @@ -48,11 +41,6 @@ Includes and definitions for developing with graphite2. %setup -q %patch0 -p1 -b .arm %patch1 -p1 -b .cmake -%patch2 -p1 -b .warnings -%patch3 -p1 -b .resourceLeak -%patch4 -p1 -b .CTOR_DTOR_LEAK -%patch5 -p1 -b .leaked_storage -%patch6 -p1 -b .silence_leak %build %cmake -DGRAPHITE2_COMPARE_RENDERER=OFF . @@ -86,9 +74,6 @@ ctest %{_libdir}/pkgconfig/graphite2.pc %changelog -* Mon Jul 23 2018 Caolán McNamara - 1.3.10-7 -- rhbz#1602527 covscan warnings - * Fri Jul 13 2018 Fedora Release Engineering - 1.3.10-6 - Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild