Fix not-quite-right string comparison in parse_jsonb_index_flags().
authorTom Lane <tgl@sss.pgh.pa.us>
Fri, 31 Jan 2020 22:26:40 +0000 (17:26 -0500)
committerTom Lane <tgl@sss.pgh.pa.us>
Fri, 31 Jan 2020 22:26:40 +0000 (17:26 -0500)
This code would accept "strinX", where X is any 1-byte character,
as meaning "string".  Clearly it wasn't meant to do that.

No back-patch, since this doesn't affect correct queries and
there's some tiny chance we'd break somebody's incorrect query
in a minor release.

Report and patch by Dominik Czarnota.

Discussion: https://postgr.es/m/CABEVAa1dU0mDCAfaT8WF2adVXTDsLVJy_izotg6ze_hh-cn8qQ@mail.gmail.com

src/backend/utils/adt/jsonfuncs.c

index 4f6fd0de023c94cb27e0b0a49d4e15f12d1507bd..6e33dfb2a2b5ef980f7be54c9a2ff0946bb62667 100644 (file)
@@ -5125,7 +5125,7 @@ parse_jsonb_index_flags(Jsonb *jb)
                 pg_strncasecmp(v.val.string.val, "key", 3) == 0)
            flags |= jtiKey;
        else if (v.val.string.len == 6 &&
-                pg_strncasecmp(v.val.string.val, "string", 5) == 0)
+                pg_strncasecmp(v.val.string.val, "string", 6) == 0)
            flags |= jtiString;
        else if (v.val.string.len == 7 &&
                 pg_strncasecmp(v.val.string.val, "numeric", 7) == 0)