summarylogtreecommitdiffstats
path: root/0008-Fix-crashes-in-rasterization-code-using-setjmp.patch
diff options
context:
space:
mode:
Diffstat (limited to '0008-Fix-crashes-in-rasterization-code-using-setjmp.patch')
-rw-r--r--0008-Fix-crashes-in-rasterization-code-using-setjmp.patch252
1 files changed, 0 insertions, 252 deletions
diff --git a/0008-Fix-crashes-in-rasterization-code-using-setjmp.patch b/0008-Fix-crashes-in-rasterization-code-using-setjmp.patch
deleted file mode 100644
index 179d84763d85..000000000000
--- a/0008-Fix-crashes-in-rasterization-code-using-setjmp.patch
+++ /dev/null
@@ -1,252 +0,0 @@
-From cc87940ac0e524bc249bc79c343eaa1502d8bbc1 Mon Sep 17 00:00:00 2001
-From: Martchus <martchus@gmx.net>
-Date: Sat, 26 Jun 2021 22:24:12 +0200
-Subject: [PATCH 08/17] Fix crashes in rasterization code using setjmp
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-* Use C++ exceptions instead of setjmp to workaround crashes
-* The setjmp/longjmp code crashes when compiling for x86_64-w64-mingw32
- with GCC 11 and optimizations enabled¹. It crashes when jumping back
- to handle the case of insufficient memory. This change uses C++
- exceptions instead (turning the compile unit into a C++ unit instead
- of just using C) which should behave identical but don't seem to
- crash.
-* Fix rendering certain SVGs and possibly other graphics
-
-Change-Id: I01937d13569dd01ab4cb1f608020544c93bc343c
-
----
-
-¹ See https://bugreports.qt.io/browse/QTBUG-94692 for details.
----
- src/gui/CMakeLists.txt | 7 +++-
- .../{qgrayraster.c => qgrayraster.cpp} | 41 ++++++++-----------
- src/gui/painting/qt_attribution.json | 2 +-
- 3 files changed, 24 insertions(+), 26 deletions(-)
- rename src/gui/painting/{qgrayraster.c => qgrayraster.cpp} (98%)
-
-diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt
-index dded14bb313..820b943f16d 100644
---- a/src/gui/CMakeLists.txt
-+++ b/src/gui/CMakeLists.txt
-@@ -174,7 +174,7 @@ qt_internal_add_module(Gui
- painting/qdrawingprimitive_sse2_p.h
- painting/qemulationpaintengine.cpp painting/qemulationpaintengine_p.h
- painting/qfixed_p.h
-- painting/qgrayraster.c painting/qgrayraster_p.h
-+ painting/qgrayraster.cpp painting/qgrayraster_p.h
- painting/qicc.cpp painting/qicc_p.h
- painting/qimagescale.cpp painting/qimagescale_p.h
- painting/qmath_p.h
-@@ -283,6 +283,11 @@ qt_internal_add_module(Gui
- "(^|/)qrhi\\.h$|(^|/)qrhi_platform\\.h$|(^|/)qshader\\.h$|(^|/)qshaderdescription\\.h$"
- )
-
-+# enable exceptions for painting/qgrayraster.cpp
-+set_source_files_properties("painting/qgrayraster.cpp"
-+ PROPERTIES COMPILE_FLAGS "-fexceptions" DISABLE_PRECOMPILE_HEADERS ON SKIP_PRECOMPILE_HEADERS ON
-+)
-+
- # Resources:
- set_source_files_properties("../3rdparty/icc/sRGB2014.icc"
- PROPERTIES QT_RESOURCE_ALIAS "sRGB2014.icc"
-diff --git a/src/gui/painting/qgrayraster.c b/src/gui/painting/qgrayraster.cpp
-similarity index 98%
-rename from src/gui/painting/qgrayraster.c
-rename to src/gui/painting/qgrayraster.cpp
-index 3c222c49e16..813cfc08dcf 100644
---- a/src/gui/painting/qgrayraster.c
-+++ b/src/gui/painting/qgrayraster.cpp
-@@ -3,7 +3,7 @@
-
- /***************************************************************************/
- /* */
--/* qgrayraster.c, derived from ftgrays.c */
-+/* qgrayraster.cpp, derived from ftgrays.c */
- /* */
- /* A new `perfect' anti-aliasing renderer (body). */
- /* */
-@@ -121,17 +121,12 @@
- # include <vxWorksCommon.h> /* needed for setjmp.h */
- #endif
- #include <string.h> /* for qt_ft_memcpy() */
--#include <setjmp.h>
- #include <limits.h>
-
- #define QT_FT_UINT_MAX UINT_MAX
-
- #define qt_ft_memset memset
-
--#define qt_ft_setjmp setjmp
--#define qt_ft_longjmp longjmp
--#define qt_ft_jmp_buf jmp_buf
--
- #include <stddef.h>
- typedef ptrdiff_t QT_FT_PtrDist;
-
-@@ -141,6 +136,8 @@ typedef ptrdiff_t QT_FT_PtrDist;
- #define ErrRaster_Memory_Overflow -4
- #define ErrRaster_OutOfMemory -6
-
-+struct RasterMemoryOverflow {};
-+
- #define QT_FT_BEGIN_HEADER
- #define QT_FT_END_HEADER
-
-@@ -274,8 +271,6 @@ QT_FT_END_STMNT
- int band_size;
- int band_shoot;
-
-- qt_ft_jmp_buf jump_buffer;
--
- void* buffer;
- long buffer_size;
-
-@@ -297,12 +292,14 @@ QT_FT_END_STMNT
-
- } TRaster, *PRaster;
-
-+ extern "C" {
- int q_gray_rendered_spans(TRaster *raster)
- {
- if ( raster && raster->worker )
- return raster->worker->skip_spans > 0 ? 0 : -raster->worker->skip_spans;
- return 0;
- }
-+ }
-
- /*************************************************************************/
- /* */
-@@ -368,7 +365,6 @@ QT_FT_END_STMNT
- ras.max_ey = ( ras.max_ey + 63 ) >> 6;
- }
-
--
- /*************************************************************************/
- /* */
- /* Record the current cell in the table. */
-@@ -397,7 +393,7 @@ QT_FT_END_STMNT
- }
-
- if ( ras.num_cells >= ras.max_cells )
-- qt_ft_longjmp( ras.jump_buffer, 1 );
-+ throw RasterMemoryOverflow();
-
- cell = ras.cells + ras.num_cells++;
- cell->x = x;
-@@ -1470,7 +1466,7 @@ QT_FT_END_STMNT
-
- QT_FT_TRACE5(( " move to (%.2f, %.2f)\n",
- v_start.x / 64.0, v_start.y / 64.0 ));
-- error = gray_move_to( &v_start, user );
-+ error = gray_move_to( &v_start, static_cast<PWorker>(user) );
- if ( error )
- goto Exit;
-
-@@ -1492,7 +1488,7 @@ QT_FT_END_STMNT
-
- QT_FT_TRACE5(( " line to (%.2f, %.2f)\n",
- vec.x / 64.0, vec.y / 64.0 ));
-- gray_render_line(user, UPSCALE(vec.x), UPSCALE(vec.y));
-+ gray_render_line(static_cast<PWorker>(user), UPSCALE(vec.x), UPSCALE(vec.y));
- continue;
- }
-
-@@ -1521,7 +1517,7 @@ QT_FT_END_STMNT
- " with control (%.2f, %.2f)\n",
- vec.x / 64.0, vec.y / 64.0,
- v_control.x / 64.0, v_control.y / 64.0 ));
-- gray_render_conic(user, &v_control, &vec);
-+ gray_render_conic(static_cast<PWorker>(user), &v_control, &vec);
- continue;
- }
-
-@@ -1535,7 +1531,7 @@ QT_FT_END_STMNT
- " with control (%.2f, %.2f)\n",
- v_middle.x / 64.0, v_middle.y / 64.0,
- v_control.x / 64.0, v_control.y / 64.0 ));
-- gray_render_conic(user, &v_control, &v_middle);
-+ gray_render_conic(static_cast<PWorker>(user), &v_control, &v_middle);
-
- v_control = vec;
- goto Do_Conic;
-@@ -1545,7 +1541,7 @@ QT_FT_END_STMNT
- " with control (%.2f, %.2f)\n",
- v_start.x / 64.0, v_start.y / 64.0,
- v_control.x / 64.0, v_control.y / 64.0 ));
-- gray_render_conic(user, &v_control, &v_start);
-+ gray_render_conic(static_cast<PWorker>(user), &v_control, &v_start);
- goto Close;
- }
-
-@@ -1580,7 +1576,7 @@ QT_FT_END_STMNT
- vec.x / 64.0, vec.y / 64.0,
- vec1.x / 64.0, vec1.y / 64.0,
- vec2.x / 64.0, vec2.y / 64.0 ));
-- gray_render_cubic(user, &vec1, &vec2, &vec);
-+ gray_render_cubic(static_cast<PWorker>(user), &vec1, &vec2, &vec);
- continue;
- }
-
-@@ -1589,7 +1585,7 @@ QT_FT_END_STMNT
- v_start.x / 64.0, v_start.y / 64.0,
- vec1.x / 64.0, vec1.y / 64.0,
- vec2.x / 64.0, vec2.y / 64.0 ));
-- gray_render_cubic(user, &vec1, &vec2, &v_start);
-+ gray_render_cubic(static_cast<PWorker>(user), &vec1, &vec2, &v_start);
- goto Close;
- }
- }
-@@ -1598,7 +1594,7 @@ QT_FT_END_STMNT
- /* close the contour with a line segment */
- QT_FT_TRACE5(( " line to (%.2f, %.2f)\n",
- v_start.x / 64.0, v_start.y / 64.0 ));
-- gray_render_line(user, UPSCALE(v_start.x), UPSCALE(v_start.y));
-+ gray_render_line(static_cast<PWorker>(user), UPSCALE(v_start.x), UPSCALE(v_start.y));
-
- Close:
- first = last + 1;
-@@ -1626,14 +1622,11 @@ QT_FT_END_STMNT
- {
- volatile int error = 0;
-
-- if ( qt_ft_setjmp( ras.jump_buffer ) == 0 )
-- {
-+ try {
- error = QT_FT_Outline_Decompose( &ras.outline, &ras );
- if ( !ras.invalid )
- gray_record_cell( RAS_VAR );
-- }
-- else
-- {
-+ } catch (const RasterMemoryOverflow &) {
- error = ErrRaster_Memory_Overflow;
- }
-
-@@ -1898,7 +1891,7 @@ QT_FT_END_STMNT
- static int
- gray_raster_new( QT_FT_Raster* araster )
- {
-- *araster = malloc(sizeof(TRaster));
-+ *araster = static_cast<TRaster *>(malloc(sizeof(TRaster)));
- if (!*araster) {
- *araster = 0;
- return ErrRaster_Memory_Overflow;
-diff --git a/src/gui/painting/qt_attribution.json b/src/gui/painting/qt_attribution.json
-index 33ed2fd5c7b..658547ce4a8 100644
---- a/src/gui/painting/qt_attribution.json
-+++ b/src/gui/painting/qt_attribution.json
-@@ -4,7 +4,7 @@
- "Name": "Anti-aliasing rasterizer from FreeType 2",
- "QDocModule": "qtgui",
- "QtUsage": "Used in Qt GUI.",
-- "Files": "qgrayraster.c",
-+ "Files": "qgrayraster.cpp",
-
- "Description": "FreeType is a freely available software library to render fonts.",
- "Homepage": "http://www.freetype.org",
---
-2.44.0
-