1
0
mirror of https://github.com/postgres/postgres.git synced 2025-09-08 00:47:37 +03:00

Fix text_position to not scan past end of source string in multibyte

case, per report from Korea PostgreSQL Users' Group. Copied from Tom
Lane's 7.4 branch patch.
This commit is contained in:
Joe Conway
2004-02-01 04:05:13 +00:00
parent 1b25db6a3c
commit b59917f02e

View File

@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/utils/adt/varlena.c,v 1.92.2.2 2003/11/30 20:52:37 joe Exp $
* $Header: /cvsroot/pgsql/src/backend/utils/adt/varlena.c,v 1.92.2.3 2004/02/01 04:05:13 joe Exp $
*
*-------------------------------------------------------------------------
*/
@@ -665,9 +665,6 @@ text_position(Datum str, Datum search_str, int matchnum)
len1 = (VARSIZE(t1) - VARHDRSZ);
len2 = (VARSIZE(t2) - VARHDRSZ);
/* no use in searching str past point where search_str will fit */
px = (len1 - len2);
if (eml == 1) /* simple case - single byte encoding */
{
char *p1,
@@ -676,6 +673,9 @@ text_position(Datum str, Datum search_str, int matchnum)
p1 = VARDATA(t1);
p2 = VARDATA(t2);
/* no use in searching str past point where search_str will fit */
px = (len1 - len2);
for (p = 0; p <= px; p++)
{
if ((*p2 == *p1) && (strncmp(p1, p2, len2) == 0))
@@ -703,6 +703,9 @@ text_position(Datum str, Datum search_str, int matchnum)
(void) pg_mb2wchar_with_len((unsigned char *) VARDATA(t2), p2, len2);
len2 = pg_wchar_strlen(p2);
/* no use in searching str past point where search_str will fit */
px = (len1 - len2);
for (p = 0; p <= px; p++)
{
if ((*p2 == *p1) && (pg_wchar_strncmp(p1, p2, len2) == 0))