Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix compiler warnings from utf8.c on 32-bit build #22899

Open
wants to merge 3 commits into
base: blead
Choose a base branch
from
Open
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 6 additions & 5 deletions utf8.c
Original file line number Diff line number Diff line change
Expand Up @@ -1634,12 +1634,12 @@ Perl_utf8_to_uv_msgs_helper_(const U8 * const s0,
* than a single character */
const U8 * send = e;

SSize_t curlen = send - s0;
Size_t curlen = send - s0;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why can't this be negative?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It can be negative in non-DEBUGGING builds, where s0 <= send is treated as a reported error. For DEBUGGING builds perl asserts.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for comments. I've forgotten a possibility of s0 > send.
I pushed a new commit to move this subtraction to the point after checking s0 < send to avoid underflow.

U32 possible_problems; /* A bit is set here for each potential problem
found as we go along */
UV uv = 0;
SSize_t expectlen; /* How long should this sequence be? */
SSize_t avail_len; /* When input is too short, gives what that is */
Size_t expectlen; /* How long should this sequence be? */
Size_t avail_len; /* When input is too short, gives what that is */

dTHX;

Expand Down Expand Up @@ -1892,7 +1892,7 @@ Perl_utf8_to_uv_msgs_helper_(const U8 * const s0,
* full length with occurrences of the smallest continuation
* byte. For surrogates we could just look at the bytes, but
* this single algorithm works for both those and supers. */
for (unsigned i = curlen; i < expectlen; i++) {
for (Size_t i = curlen; i < expectlen; i++) {
uv = UTF8_ACCUMULATE(uv, UTF8_MIN_CONTINUATION_BYTE);
}
}
Expand Down Expand Up @@ -2096,7 +2096,8 @@ Perl_utf8_to_uv_msgs_helper_(const U8 * const s0,
switch (this_problem) {
default:
Perl_croak(aTHX_ "panic: Unexpected case value in "
" utf8n_to_uvchr_msgs() %d", this_problem);
" utf8n_to_uvchr_msgs() %" U32uf,
this_problem);
/* NOTREACHED */
break;

Expand Down
Loading