Fix #152 crash on Apple M1 by casting 0 to (OBJECT *) explicitly. #214
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Currently, when the
NULL
-terminated variadic functioncall_rule()
is invoked, the value0
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 bycall_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:
In some cases, it can even corrupt the internal state of the program, creating an infinite loop.
This commit fixes the problem (Issue #152) by explicitly casting the value
0
to the correct pointer type(OBJECT *)
. According to Rich Felker, the primary author of musl libc, type casting from 0 is technically safer than using the valueNULL
.P.S: I'm not sure which is the correct branch to merge, I selected 4.9.3 only as a placeholder.