diff options
Diffstat (limited to 'dev-util/b2/files/b2-4.9.3-fix-apple-m1-crash-by-explicit-pointer-cast.patch')
-rw-r--r-- | dev-util/b2/files/b2-4.9.3-fix-apple-m1-crash-by-explicit-pointer-cast.patch | 55 |
1 files changed, 0 insertions, 55 deletions
diff --git a/dev-util/b2/files/b2-4.9.3-fix-apple-m1-crash-by-explicit-pointer-cast.patch b/dev-util/b2/files/b2-4.9.3-fix-apple-m1-crash-by-explicit-pointer-cast.patch deleted file mode 100644 index 753c60fd14ce..000000000000 --- a/dev-util/b2/files/b2-4.9.3-fix-apple-m1-crash-by-explicit-pointer-cast.patch +++ /dev/null @@ -1,55 +0,0 @@ -https://github.com/bfgroup/b2/issues/152 -https://github.com/bfgroup/b2/pull/214 -https://bugs.gentoo.org/895524 - -From 62dc6ff74a0b9717b4a8dd61ce06770e6fb7c177 Mon Sep 17 00:00:00 2001 -From: Yifeng Li <tomli@tomli.me> -Date: Mon, 20 Feb 2023 09:52:32 +0000 -Subject: [PATCH] Fix #152 crash on Apple M1 by casting 0 to (OBJECT *) - explicitly. - -Currently, when the NULL-terminated variadic function call_rule() -is invoked, the value "0" is passed as the last argument to act -as a terminator. However, this is an integer value, which is -incompatible with the pointer data type expected by call_rule(). - -This is undefined behavior in C, correct operation is not -guaranteed. In fact, it causes b2 to crash on Apple M1 when GCC -is used - the loop is not terminated when it should, instead, it -keeps running, creating the following error: - -> lol_add failed due to reached limit of 19 elements - -In some cases, it can even corrupt the internal state of the program, -creating an infinite loop. - -This commit fixes the problem by explicitly casting the value 0 to -the correct pointer type (OBJECT *). - -Signed-off-by: Yifeng Li <tomli@tomli.me> ---- - src/engine/modules/property-set.cpp | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/src/engine/modules/property-set.cpp b/src/engine/modules/property-set.cpp -index 6e190a7639..b0d3c2dab8 100644 ---- src/engine/modules/property-set.cpp -+++ src/engine/modules/property-set.cpp -@@ -162,7 +162,7 @@ LIST * property_set_create( FRAME * frame, int flags ) - OBJECT * rulename = object_new( "new" ); - OBJECT * varname = object_new( "self.raw" ); - LIST * val = call_rule( rulename, frame, -- list_new( object_new( "property-set" ) ), 0 ); -+ list_new( object_new( "property-set" ) ), (OBJECT *) 0 ); - LISTITER iter, end; - object_free( rulename ); - pos->value = object_copy( list_front( val ) ); -@@ -183,7 +183,7 @@ LIST * property_set_create( FRAME * frame, int flags ) - import_module( imports, frame->module ); - rulename = object_new( "errors.error" ); - call_rule( rulename, frame, -- list_new( object_new( message->value ) ), 0 ); -+ list_new( object_new( message->value ) ), (OBJECT *) 0 ); - /* unreachable */ - string_free( message ); - list_free( imports ); |