From d9f37e6661ec654f7252bfc23e084c9e2ca5db14 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Thu, 18 Jul 2013 21:55:38 -0400 Subject: [PATCH] Add checks for valid multibyte character length in UtfToLocal, LocalToUtf. This is mainly to suppress "uninitialized variable" warnings from very recent versions of gcc. But it seems like a good robustness thing anyway, not to mention that we might someday decide to support 6-byte UTF8. Per report from Karol Trzcionka. No back-patch since there's no reason at the moment to think this is more than cosmetic. --- 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 ab2e966f1c..63a2d4a8fb 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);