Fix pointer wrap around undefined behavior #299
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.
zbar/zbar/img_scanner.c
Line 965 in a549566
zbar/zbar/img_scanner.c
Lines 861 to 866 in a549566
This expression
movedelta(-1, 0);
is expanded towhere the RHS is evaluated unsigned as
(uintptr_t) -1
i.e. 0xfff...This pointer addition with unsigned wrap around is an undefined behavior in C.
In the latest clang trunk, the expr is optimized as a constant assignment (
p = -1;
), and segfault in runtime.https://godbolt.org/z/G8xeMWTo5
This PR fixes the issue by casting the unsigned variable
w
to a signed typeptrdiff_t
.Given that dx and dy are both int, the RHS expression is evaluated as signed -1.