1
0
mirror of https://git.tartarus.org/simon/putty.git synced 2025-01-09 17:38:00 +00:00

uxucs.c: fix type of wcrtomb return value.

wcrtomb returns a size_t, so it's silly to immediately assign it into
an int variable. Apparently running gcc with LTO enabled points this
out as an error.

This was benign as far as I can see: the obvious risk of integer
overflow could only happen if the OS wanted to convert a single wide
character into more than 2^31 bytes, and the test of the return value
against (size_t)-1 for an error check seems to work anyway in
practice, although I suspect that's only because of implementation-
defined behaviour in gcc at the point where the size_t is narrowed to
a signed int.

(cherry picked from commit 99f5fa34ab)
This commit is contained in:
Simon Tatham 2020-05-16 16:14:13 +01:00
parent c39f6a2223
commit d527b1a886

View File

@ -68,7 +68,7 @@ int wc_to_mb(int codepage, int flags, const wchar_t *wcstr, int wclen,
memset(&state, 0, sizeof state); memset(&state, 0, sizeof state);
while (wclen > 0) { while (wclen > 0) {
int i = wcrtomb(output, wcstr[0], &state); size_t i = wcrtomb(output, wcstr[0], &state);
if (i == (size_t)-1 || i > n - mblen) if (i == (size_t)-1 || i > n - mblen)
break; break;
memcpy(mbstr+n, output, i); memcpy(mbstr+n, output, i);