From 70c64135d0a1715291b4a488df7377bf87207f8c Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sun, 12 Dec 2021 15:59:00 -0500 Subject: [PATCH] Add checks for valid multibyte character length in UtfToLocal, LocalToUtf. This back-patches commit d9f37e666 into out-of-support branches, pursuant to newly-established project policy. The point is to suppress "uninitialized variable" warnings so that people building these branches needn't expend brain cells verifying that it's safe to ignore the warnings. Discussion: https://postgr.es/m/d0316012-ece7-7b7e-2d36-9c38cb77cb3b@enterprisedb.com --- src/backend/utils/mb/conv.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/backend/utils/mb/conv.c b/src/backend/utils/mb/conv.c index 7a9ab0aad6b..aa866595b12 100644 --- a/src/backend/utils/mb/conv.c +++ b/src/backend/utils/mb/conv.c @@ -382,6 +382,11 @@ UtfToLocal(const unsigned char *utf, unsigned char *iso, iutf |= *utf++ << 8; iutf |= *utf++; } + else + { + elog(ERROR, "unsupported character length %d", l); + iutf = 0; /* keep compiler quiet */ + } /* * first, try with combined map if possible @@ -437,6 +442,11 @@ UtfToLocal(const unsigned char *utf, unsigned char *iso, iutf |= *utf++ << 8; iutf |= *utf++; } + else + { + elog(ERROR, "unsupported character length %d", l); + iutf = 0; /* keep compiler quiet */ + } cutf[1] = iutf; cp = bsearch(cutf, cmap, size2, @@ -546,6 +556,11 @@ LocalToUtf(const unsigned char *iso, unsigned char *utf, iiso |= *iso++ << 8; iiso |= *iso++; } + else + { + elog(ERROR, "unsupported character length %d", l); + iiso = 0; /* keep compiler quiet */ + } p = bsearch(&iiso, map, size1, sizeof(pg_local_to_utf), compare2);