X-Git-Url: https://git.exim.org/exim.git/blobdiff_plain/f3ebb786e451da973560f1c9d8cdb151d25108b5..1ddb1855402d48ad735e46abaf0d662e45600ecd:/src/src/utf8.c diff --git a/src/src/utf8.c b/src/src/utf8.c index 529a9a660..f035dafd0 100644 --- a/src/src/utf8.c +++ b/src/src/utf8.c @@ -133,7 +133,7 @@ return s; uschar * string_localpart_utf8_to_alabel(const uschar * utf8, uschar ** err) { -size_t ucs4_len; +size_t ucs4_len = 0; punycode_uint * p; size_t p_len; uschar * res; @@ -142,6 +142,11 @@ int rc; if (!string_is_utf8(utf8)) return string_copy(utf8); p = (punycode_uint *) stringprep_utf8_to_ucs4(CCS utf8, -1, &ucs4_len); +if (!p || !ucs4_len) + { + if (err) *err = US"l_u2a: bad UTF-8 input"; + return NULL; + } p_len = ucs4_len*4; /* this multiplier is pure guesswork */ res = store_get(p_len+5, is_tainted(utf8)); @@ -240,28 +245,29 @@ return l; /* See a description in tls-openssl.c for an explanation of why this exists. -Arguments: a FILE* to print the results to -Returns: nothing +Arguments: string to append to +Returns: string */ -void -utf8_version_report(FILE *f) +gstring * +utf8_version_report(gstring * g) { #ifdef SUPPORT_I18N_2008 -fprintf(f, "Library version: IDN2: Compile: %s\n" +g = string_fmt_append(g, "Library version: IDN2: Compile: %s\n" " Runtime: %s\n", IDN2_VERSION, idn2_check_version(NULL)); -fprintf(f, "Library version: Stringprep: Compile: %s\n" +g = string_fmt_append(g, "Library version: Stringprep: Compile: %s\n" " Runtime: %s\n", STRINGPREP_VERSION, stringprep_check_version(NULL)); #else -fprintf(f, "Library version: IDN: Compile: %s\n" +g = string_fmt_append(g, "Library version: IDN: Compile: %s\n" " Runtime: %s\n", STRINGPREP_VERSION, stringprep_check_version(NULL)); #endif +return g; } #endif /* whole file */