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.
This commit is contained in:
Tom Lane 2013-07-18 21:55:38 -04:00
parent e2bd904955
commit d9f37e6661

View File

@ -382,6 +382,11 @@ UtfToLocal(const unsigned char *utf, unsigned char *iso,
iutf |= *utf++ << 8; iutf |= *utf++ << 8;
iutf |= *utf++; iutf |= *utf++;
} }
else
{
elog(ERROR, "unsupported character length %d", l);
iutf = 0; /* keep compiler quiet */
}
/* /*
* first, try with combined map if possible * first, try with combined map if possible
@ -437,6 +442,11 @@ UtfToLocal(const unsigned char *utf, unsigned char *iso,
iutf |= *utf++ << 8; iutf |= *utf++ << 8;
iutf |= *utf++; iutf |= *utf++;
} }
else
{
elog(ERROR, "unsupported character length %d", l);
iutf = 0; /* keep compiler quiet */
}
cutf[1] = iutf; cutf[1] = iutf;
cp = bsearch(cutf, cmap, size2, cp = bsearch(cutf, cmap, size2,
@ -546,6 +556,11 @@ LocalToUtf(const unsigned char *iso, unsigned char *utf,
iiso |= *iso++ << 8; iiso |= *iso++ << 8;
iiso |= *iso++; iiso |= *iso++;
} }
else
{
elog(ERROR, "unsupported character length %d", l);
iiso = 0; /* keep compiler quiet */
}
p = bsearch(&iiso, map, size1, p = bsearch(&iiso, map, size1,
sizeof(pg_local_to_utf), compare2); sizeof(pg_local_to_utf), compare2);