]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Add checks for valid multibyte character length in UtfToLocal, LocalToUtf.
authorTom Lane <tgl@sss.pgh.pa.us>
Sun, 12 Dec 2021 20:59:00 +0000 (15:59 -0500)
committerTom Lane <tgl@sss.pgh.pa.us>
Sun, 12 Dec 2021 20:59:00 +0000 (15:59 -0500)
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

index 7a9ab0aad6bb2abe852d618cd77f4e5e07bead90..aa866595b1213998d0a93830ad77efb9e12c1d12 100644 (file)
@@ -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);