aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2013-07-18 21:55:38 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2013-07-18 21:55:38 -0400
commitd9f37e6661ec654f7252bfc23e084c9e2ca5db14 (patch)
treedcb80bebf992e8f5b40d4c6cae35a128c09fd05e
parente2bd904955e2221eddf01110b1f25002de2aaa83 (diff)
downloadpostgresql-d9f37e6661ec654f7252bfc23e084c9e2ca5db14.tar.gz
postgresql-d9f37e6661ec654f7252bfc23e084c9e2ca5db14.zip
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.
-rw-r--r--src/backend/utils/mb/conv.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/backend/utils/mb/conv.c b/src/backend/utils/mb/conv.c
index ab2e966f1cf..63a2d4a8fb0 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);