]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Replace argument-checking Asserts with regular test-and-elog checks in all
authorTom Lane <tgl@sss.pgh.pa.us>
Thu, 29 Jan 2009 19:24:19 +0000 (19:24 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Thu, 29 Jan 2009 19:24:19 +0000 (19:24 +0000)
encoding conversion functions.  These are not can't-happen cases because
it's possible to create a conversion with the wrong conversion function
for the specified encoding pair.  That would lead to an Assert crash in
an Assert-enabled build, or incorrect conversion otherwise, neither of
which is desirable.  This would be a DOS issue if production databases
were customarily built with asserts enabled, but fortunately that's not so.
Per an observation by Heikki.

Back-patch to all supported branches.

25 files changed:
src/backend/utils/mb/conversion_procs/ascii_and_mic/ascii_and_mic.c
src/backend/utils/mb/conversion_procs/cyrillic_and_mic/cyrillic_and_mic.c
src/backend/utils/mb/conversion_procs/euc_cn_and_mic/euc_cn_and_mic.c
src/backend/utils/mb/conversion_procs/euc_jp_and_sjis/euc_jp_and_sjis.c
src/backend/utils/mb/conversion_procs/euc_kr_and_mic/euc_kr_and_mic.c
src/backend/utils/mb/conversion_procs/euc_tw_and_big5/euc_tw_and_big5.c
src/backend/utils/mb/conversion_procs/latin2_and_win1250/latin2_and_win1250.c
src/backend/utils/mb/conversion_procs/latin_and_mic/latin_and_mic.c
src/backend/utils/mb/conversion_procs/utf8_and_ascii/utf8_and_ascii.c
src/backend/utils/mb/conversion_procs/utf8_and_big5/utf8_and_big5.c
src/backend/utils/mb/conversion_procs/utf8_and_cyrillic/utf8_and_cyrillic.c
src/backend/utils/mb/conversion_procs/utf8_and_euc_cn/utf8_and_euc_cn.c
src/backend/utils/mb/conversion_procs/utf8_and_euc_jp/utf8_and_euc_jp.c
src/backend/utils/mb/conversion_procs/utf8_and_euc_kr/utf8_and_euc_kr.c
src/backend/utils/mb/conversion_procs/utf8_and_euc_tw/utf8_and_euc_tw.c
src/backend/utils/mb/conversion_procs/utf8_and_gb18030/utf8_and_gb18030.c
src/backend/utils/mb/conversion_procs/utf8_and_gbk/utf8_and_gbk.c
src/backend/utils/mb/conversion_procs/utf8_and_iso8859/utf8_and_iso8859.c
src/backend/utils/mb/conversion_procs/utf8_and_iso8859_1/utf8_and_iso8859_1.c
src/backend/utils/mb/conversion_procs/utf8_and_johab/utf8_and_johab.c
src/backend/utils/mb/conversion_procs/utf8_and_sjis/utf8_and_sjis.c
src/backend/utils/mb/conversion_procs/utf8_and_uhc/utf8_and_uhc.c
src/backend/utils/mb/conversion_procs/utf8_and_win/utf8_and_win.c
src/backend/utils/mb/wchar.c
src/include/mb/pg_wchar.h

index 85cc1cd62dccad68279b0333b242618b5081fc82..3f4963c4e830d6ab3c8759e42a58fdfa7ea5c818 100644 (file)
@@ -6,7 +6,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/ascii_and_mic/ascii_and_mic.c,v 1.12 2006/05/30 22:12:14 tgl Exp $
+ *       $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/ascii_and_mic/ascii_and_mic.c,v 1.12.2.1 2009/01/29 19:24:17 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -41,9 +41,7 @@ ascii_to_mic(PG_FUNCTION_ARGS)
        unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
        int                     len = PG_GETARG_INT32(4);
 
-       Assert(PG_GETARG_INT32(0) == PG_SQL_ASCII);
-       Assert(PG_GETARG_INT32(1) == PG_MULE_INTERNAL);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_SQL_ASCII, PG_MULE_INTERNAL);
 
        pg_ascii2mic(src, dest, len);
 
@@ -57,9 +55,7 @@ mic_to_ascii(PG_FUNCTION_ARGS)
        unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
        int                     len = PG_GETARG_INT32(4);
 
-       Assert(PG_GETARG_INT32(0) == PG_MULE_INTERNAL);
-       Assert(PG_GETARG_INT32(1) == PG_SQL_ASCII);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_MULE_INTERNAL, PG_SQL_ASCII);
 
        pg_mic2ascii(src, dest, len);
 
index 5051bb73d5f8f6a811fd448fbf7825bbc083c77c..e098579004946d057fe11c05604f02823e6b57af 100644 (file)
@@ -6,7 +6,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/cyrillic_and_mic/cyrillic_and_mic.c,v 1.14.2.1 2008/03/20 10:37:40 heikki Exp $
+ *       $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/cyrillic_and_mic/cyrillic_and_mic.c,v 1.14.2.2 2009/01/29 19:24:17 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -88,9 +88,7 @@ koi8r_to_mic(PG_FUNCTION_ARGS)
        unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
        int                     len = PG_GETARG_INT32(4);
 
-       Assert(PG_GETARG_INT32(0) == PG_KOI8R);
-       Assert(PG_GETARG_INT32(1) == PG_MULE_INTERNAL);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_KOI8R, PG_MULE_INTERNAL);
 
        koi8r2mic(src, dest, len);
 
@@ -104,9 +102,7 @@ mic_to_koi8r(PG_FUNCTION_ARGS)
        unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
        int                     len = PG_GETARG_INT32(4);
 
-       Assert(PG_GETARG_INT32(0) == PG_MULE_INTERNAL);
-       Assert(PG_GETARG_INT32(1) == PG_KOI8R);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_MULE_INTERNAL, PG_KOI8R);
 
        mic2koi8r(src, dest, len);
 
@@ -120,9 +116,7 @@ iso_to_mic(PG_FUNCTION_ARGS)
        unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
        int                     len = PG_GETARG_INT32(4);
 
-       Assert(PG_GETARG_INT32(0) == PG_ISO_8859_5);
-       Assert(PG_GETARG_INT32(1) == PG_MULE_INTERNAL);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_ISO_8859_5, PG_MULE_INTERNAL);
 
        iso2mic(src, dest, len);
 
@@ -136,9 +130,7 @@ mic_to_iso(PG_FUNCTION_ARGS)
        unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
        int                     len = PG_GETARG_INT32(4);
 
-       Assert(PG_GETARG_INT32(0) == PG_MULE_INTERNAL);
-       Assert(PG_GETARG_INT32(1) == PG_ISO_8859_5);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_MULE_INTERNAL, PG_ISO_8859_5);
 
        mic2iso(src, dest, len);
 
@@ -152,9 +144,7 @@ win1251_to_mic(PG_FUNCTION_ARGS)
        unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
        int                     len = PG_GETARG_INT32(4);
 
-       Assert(PG_GETARG_INT32(0) == PG_WIN1251);
-       Assert(PG_GETARG_INT32(1) == PG_MULE_INTERNAL);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_WIN1251, PG_MULE_INTERNAL);
 
        win12512mic(src, dest, len);
 
@@ -168,9 +158,7 @@ mic_to_win1251(PG_FUNCTION_ARGS)
        unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
        int                     len = PG_GETARG_INT32(4);
 
-       Assert(PG_GETARG_INT32(0) == PG_MULE_INTERNAL);
-       Assert(PG_GETARG_INT32(1) == PG_WIN1251);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_MULE_INTERNAL, PG_WIN1251);
 
        mic2win1251(src, dest, len);
 
@@ -184,9 +172,7 @@ win866_to_mic(PG_FUNCTION_ARGS)
        unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
        int                     len = PG_GETARG_INT32(4);
 
-       Assert(PG_GETARG_INT32(0) == PG_WIN866);
-       Assert(PG_GETARG_INT32(1) == PG_MULE_INTERNAL);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_WIN866, PG_MULE_INTERNAL);
 
        win8662mic(src, dest, len);
 
@@ -200,9 +186,7 @@ mic_to_win866(PG_FUNCTION_ARGS)
        unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
        int                     len = PG_GETARG_INT32(4);
 
-       Assert(PG_GETARG_INT32(0) == PG_MULE_INTERNAL);
-       Assert(PG_GETARG_INT32(1) == PG_WIN866);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_MULE_INTERNAL, PG_WIN866);
 
        mic2win866(src, dest, len);
 
@@ -217,9 +201,7 @@ koi8r_to_win1251(PG_FUNCTION_ARGS)
        int                     len = PG_GETARG_INT32(4);
        unsigned char *buf;
 
-       Assert(PG_GETARG_INT32(0) == PG_KOI8R);
-       Assert(PG_GETARG_INT32(1) == PG_WIN1251);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_KOI8R, PG_WIN1251);
 
        buf = palloc(len * ENCODING_GROWTH_RATE);
        koi8r2mic(src, buf, len);
@@ -237,9 +219,7 @@ win1251_to_koi8r(PG_FUNCTION_ARGS)
        int                     len = PG_GETARG_INT32(4);
        unsigned char *buf;
 
-       Assert(PG_GETARG_INT32(0) == PG_WIN1251);
-       Assert(PG_GETARG_INT32(1) == PG_KOI8R);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_WIN1251, PG_KOI8R);
 
        buf = palloc(len * ENCODING_GROWTH_RATE);
        win12512mic(src, buf, len);
@@ -257,9 +237,7 @@ koi8r_to_win866(PG_FUNCTION_ARGS)
        int                     len = PG_GETARG_INT32(4);
        unsigned char *buf;
 
-       Assert(PG_GETARG_INT32(0) == PG_KOI8R);
-       Assert(PG_GETARG_INT32(1) == PG_WIN866);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_KOI8R, PG_WIN866);
 
        buf = palloc(len * ENCODING_GROWTH_RATE);
        koi8r2mic(src, buf, len);
@@ -277,9 +255,7 @@ win866_to_koi8r(PG_FUNCTION_ARGS)
        int                     len = PG_GETARG_INT32(4);
        unsigned char *buf;
 
-       Assert(PG_GETARG_INT32(0) == PG_WIN866);
-       Assert(PG_GETARG_INT32(1) == PG_KOI8R);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_WIN866, PG_KOI8R);
 
        buf = palloc(len * ENCODING_GROWTH_RATE);
        win8662mic(src, buf, len);
@@ -297,9 +273,7 @@ win866_to_win1251(PG_FUNCTION_ARGS)
        int                     len = PG_GETARG_INT32(4);
        unsigned char *buf;
 
-       Assert(PG_GETARG_INT32(0) == PG_WIN866);
-       Assert(PG_GETARG_INT32(1) == PG_WIN1251);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_WIN866, PG_WIN1251);
 
        /*
         * Note: There are a few characters like the "Numero" sign that exist in
@@ -323,9 +297,7 @@ win1251_to_win866(PG_FUNCTION_ARGS)
        int                     len = PG_GETARG_INT32(4);
        unsigned char *buf;
 
-       Assert(PG_GETARG_INT32(0) == PG_WIN1251);
-       Assert(PG_GETARG_INT32(1) == PG_WIN866);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_WIN1251, PG_WIN866);
 
        /* Use mic/KOI8R as intermediary, see comment in win866_to_win1251() */
        buf = palloc(len * ENCODING_GROWTH_RATE);
@@ -344,9 +316,7 @@ iso_to_koi8r(PG_FUNCTION_ARGS)
        int                     len = PG_GETARG_INT32(4);
        unsigned char *buf;
 
-       Assert(PG_GETARG_INT32(0) == PG_ISO_8859_5);
-       Assert(PG_GETARG_INT32(1) == PG_KOI8R);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_ISO_8859_5, PG_KOI8R);
 
        buf = palloc(len * ENCODING_GROWTH_RATE);
        iso2mic(src, buf, len);
@@ -364,9 +334,7 @@ koi8r_to_iso(PG_FUNCTION_ARGS)
        int                     len = PG_GETARG_INT32(4);
        unsigned char *buf;
 
-       Assert(PG_GETARG_INT32(0) == PG_KOI8R);
-       Assert(PG_GETARG_INT32(1) == PG_ISO_8859_5);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_KOI8R, PG_ISO_8859_5);
 
        buf = palloc(len * ENCODING_GROWTH_RATE);
        koi8r2mic(src, buf, len);
@@ -384,9 +352,7 @@ iso_to_win1251(PG_FUNCTION_ARGS)
        int                     len = PG_GETARG_INT32(4);
        unsigned char *buf;
 
-       Assert(PG_GETARG_INT32(0) == PG_ISO_8859_5);
-       Assert(PG_GETARG_INT32(1) == PG_WIN1251);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_ISO_8859_5, PG_WIN1251);
 
        /* Use mic/KOI8R as intermediary, see comment in win866_to_win1251() */
        buf = palloc(len * ENCODING_GROWTH_RATE);
@@ -405,9 +371,7 @@ win1251_to_iso(PG_FUNCTION_ARGS)
        int                     len = PG_GETARG_INT32(4);
        unsigned char *buf;
 
-       Assert(PG_GETARG_INT32(0) == PG_WIN1251);
-       Assert(PG_GETARG_INT32(1) == PG_ISO_8859_5);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_WIN1251, PG_ISO_8859_5);
 
        /* Use mic/KOI8R as intermediary, see comment in win866_to_win1251() */
        buf = palloc(len * ENCODING_GROWTH_RATE);
@@ -426,9 +390,7 @@ iso_to_win866(PG_FUNCTION_ARGS)
        int                     len = PG_GETARG_INT32(4);
        unsigned char *buf;
 
-       Assert(PG_GETARG_INT32(0) == PG_ISO_8859_5);
-       Assert(PG_GETARG_INT32(1) == PG_WIN866);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_ISO_8859_5, PG_WIN866);
 
        /* Use mic/KOI8R as intermediary, see comment in win866_to_win1251() */
        buf = palloc(len * ENCODING_GROWTH_RATE);
@@ -447,9 +409,7 @@ win866_to_iso(PG_FUNCTION_ARGS)
        int                     len = PG_GETARG_INT32(4);
        unsigned char *buf;
 
-       Assert(PG_GETARG_INT32(0) == PG_WIN866);
-       Assert(PG_GETARG_INT32(1) == PG_ISO_8859_5);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_WIN866, PG_ISO_8859_5);
 
        /* Use mic/KOI8R as intermediary, see comment in win866_to_win1251() */
        buf = palloc(len * ENCODING_GROWTH_RATE);
index c6fa9c043f701deac53fc672b84e7695384d5bd3..16859579ef5b7bdd282a110f06e761491a340a45 100644 (file)
@@ -6,7 +6,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/euc_cn_and_mic/euc_cn_and_mic.c,v 1.15 2006/05/30 22:12:14 tgl Exp $
+ *       $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/euc_cn_and_mic/euc_cn_and_mic.c,v 1.15.2.1 2009/01/29 19:24:17 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -44,9 +44,7 @@ euc_cn_to_mic(PG_FUNCTION_ARGS)
        unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
        int                     len = PG_GETARG_INT32(4);
 
-       Assert(PG_GETARG_INT32(0) == PG_EUC_CN);
-       Assert(PG_GETARG_INT32(1) == PG_MULE_INTERNAL);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_EUC_CN, PG_MULE_INTERNAL);
 
        euc_cn2mic(src, dest, len);
 
@@ -60,9 +58,7 @@ mic_to_euc_cn(PG_FUNCTION_ARGS)
        unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
        int                     len = PG_GETARG_INT32(4);
 
-       Assert(PG_GETARG_INT32(0) == PG_MULE_INTERNAL);
-       Assert(PG_GETARG_INT32(1) == PG_EUC_CN);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_MULE_INTERNAL, PG_EUC_CN);
 
        mic2euc_cn(src, dest, len);
 
index 60104616f6ff4cff135dcfb5576d0fc66a59126e..1ebad8d6693c0993fc2313cf3b74b65e3c4a56cb 100644 (file)
@@ -6,7 +6,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/euc_jp_and_sjis/euc_jp_and_sjis.c,v 1.17 2006/05/30 22:12:14 tgl Exp $
+ *       $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/euc_jp_and_sjis/euc_jp_and_sjis.c,v 1.17.2.1 2009/01/29 19:24:17 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -70,9 +70,7 @@ euc_jp_to_sjis(PG_FUNCTION_ARGS)
        unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
        int                     len = PG_GETARG_INT32(4);
 
-       Assert(PG_GETARG_INT32(0) == PG_EUC_JP);
-       Assert(PG_GETARG_INT32(1) == PG_SJIS);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_EUC_JP, PG_SJIS);
 
        euc_jp2sjis(src, dest, len);
 
@@ -86,9 +84,7 @@ sjis_to_euc_jp(PG_FUNCTION_ARGS)
        unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
        int                     len = PG_GETARG_INT32(4);
 
-       Assert(PG_GETARG_INT32(0) == PG_SJIS);
-       Assert(PG_GETARG_INT32(1) == PG_EUC_JP);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_SJIS, PG_EUC_JP);
 
        sjis2euc_jp(src, dest, len);
 
@@ -102,9 +98,7 @@ euc_jp_to_mic(PG_FUNCTION_ARGS)
        unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
        int                     len = PG_GETARG_INT32(4);
 
-       Assert(PG_GETARG_INT32(0) == PG_EUC_JP);
-       Assert(PG_GETARG_INT32(1) == PG_MULE_INTERNAL);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_EUC_JP, PG_MULE_INTERNAL);
 
        euc_jp2mic(src, dest, len);
 
@@ -118,9 +112,7 @@ mic_to_euc_jp(PG_FUNCTION_ARGS)
        unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
        int                     len = PG_GETARG_INT32(4);
 
-       Assert(PG_GETARG_INT32(0) == PG_MULE_INTERNAL);
-       Assert(PG_GETARG_INT32(1) == PG_EUC_JP);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_MULE_INTERNAL, PG_EUC_JP);
 
        mic2euc_jp(src, dest, len);
 
@@ -134,9 +126,7 @@ sjis_to_mic(PG_FUNCTION_ARGS)
        unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
        int                     len = PG_GETARG_INT32(4);
 
-       Assert(PG_GETARG_INT32(0) == PG_SJIS);
-       Assert(PG_GETARG_INT32(1) == PG_MULE_INTERNAL);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_SJIS, PG_MULE_INTERNAL);
 
        sjis2mic(src, dest, len);
 
@@ -150,9 +140,7 @@ mic_to_sjis(PG_FUNCTION_ARGS)
        unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
        int                     len = PG_GETARG_INT32(4);
 
-       Assert(PG_GETARG_INT32(0) == PG_MULE_INTERNAL);
-       Assert(PG_GETARG_INT32(1) == PG_SJIS);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_MULE_INTERNAL, PG_SJIS);
 
        mic2sjis(src, dest, len);
 
index cade50466a18f55aa13056a2708e84b2192b7626..eea26375f9905963ecbdfc573417420bd2251aea 100644 (file)
@@ -6,7 +6,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/euc_kr_and_mic/euc_kr_and_mic.c,v 1.15 2006/05/30 22:12:14 tgl Exp $
+ *       $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/euc_kr_and_mic/euc_kr_and_mic.c,v 1.15.2.1 2009/01/29 19:24:17 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -44,9 +44,7 @@ euc_kr_to_mic(PG_FUNCTION_ARGS)
        unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
        int                     len = PG_GETARG_INT32(4);
 
-       Assert(PG_GETARG_INT32(0) == PG_EUC_KR);
-       Assert(PG_GETARG_INT32(1) == PG_MULE_INTERNAL);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_EUC_KR, PG_MULE_INTERNAL);
 
        euc_kr2mic(src, dest, len);
 
@@ -60,9 +58,7 @@ mic_to_euc_kr(PG_FUNCTION_ARGS)
        unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
        int                     len = PG_GETARG_INT32(4);
 
-       Assert(PG_GETARG_INT32(0) == PG_MULE_INTERNAL);
-       Assert(PG_GETARG_INT32(1) == PG_EUC_KR);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_MULE_INTERNAL, PG_EUC_KR);
 
        mic2euc_kr(src, dest, len);
 
index 326d84238c52a6fa628221739317094dccd2778d..a322844555eb22e270ddfd311b1eb3f81b2d0865 100644 (file)
@@ -6,7 +6,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/euc_tw_and_big5/euc_tw_and_big5.c,v 1.16 2006/10/04 00:30:02 momjian Exp $
+ *       $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/euc_tw_and_big5/euc_tw_and_big5.c,v 1.16.2.1 2009/01/29 19:24:17 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -57,9 +57,7 @@ euc_tw_to_big5(PG_FUNCTION_ARGS)
        int                     len = PG_GETARG_INT32(4);
        unsigned char *buf;
 
-       Assert(PG_GETARG_INT32(0) == PG_EUC_TW);
-       Assert(PG_GETARG_INT32(1) == PG_BIG5);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_EUC_TW, PG_BIG5);
 
        buf = palloc(len * ENCODING_GROWTH_RATE);
        euc_tw2mic(src, buf, len);
@@ -77,9 +75,7 @@ big5_to_euc_tw(PG_FUNCTION_ARGS)
        int                     len = PG_GETARG_INT32(4);
        unsigned char *buf;
 
-       Assert(PG_GETARG_INT32(0) == PG_BIG5);
-       Assert(PG_GETARG_INT32(1) == PG_EUC_TW);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_BIG5, PG_EUC_TW);
 
        buf = palloc(len * ENCODING_GROWTH_RATE);
        big52mic(src, buf, len);
@@ -96,9 +92,7 @@ euc_tw_to_mic(PG_FUNCTION_ARGS)
        unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
        int                     len = PG_GETARG_INT32(4);
 
-       Assert(PG_GETARG_INT32(0) == PG_EUC_TW);
-       Assert(PG_GETARG_INT32(1) == PG_MULE_INTERNAL);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_EUC_TW, PG_MULE_INTERNAL);
 
        euc_tw2mic(src, dest, len);
 
@@ -112,9 +106,7 @@ mic_to_euc_tw(PG_FUNCTION_ARGS)
        unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
        int                     len = PG_GETARG_INT32(4);
 
-       Assert(PG_GETARG_INT32(0) == PG_MULE_INTERNAL);
-       Assert(PG_GETARG_INT32(1) == PG_EUC_TW);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_MULE_INTERNAL, PG_EUC_TW);
 
        mic2euc_tw(src, dest, len);
 
@@ -128,9 +120,7 @@ big5_to_mic(PG_FUNCTION_ARGS)
        unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
        int                     len = PG_GETARG_INT32(4);
 
-       Assert(PG_GETARG_INT32(0) == PG_BIG5);
-       Assert(PG_GETARG_INT32(1) == PG_MULE_INTERNAL);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_BIG5, PG_MULE_INTERNAL);
 
        big52mic(src, dest, len);
 
@@ -144,9 +134,7 @@ mic_to_big5(PG_FUNCTION_ARGS)
        unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
        int                     len = PG_GETARG_INT32(4);
 
-       Assert(PG_GETARG_INT32(0) == PG_MULE_INTERNAL);
-       Assert(PG_GETARG_INT32(1) == PG_BIG5);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_MULE_INTERNAL, PG_BIG5);
 
        mic2big5(src, dest, len);
 
index ec4646ab868d213f81a9fbad1ee3cf465cc2047a..1df257ef3ce4c052c37e656facbe74e3ee5af0de 100644 (file)
@@ -6,7 +6,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/latin2_and_win1250/latin2_and_win1250.c,v 1.13 2006/05/30 22:12:14 tgl Exp $
+ *       $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/latin2_and_win1250/latin2_and_win1250.c,v 1.13.2.1 2009/01/29 19:24:17 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -56,9 +56,7 @@ latin2_to_mic(PG_FUNCTION_ARGS)
        unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
        int                     len = PG_GETARG_INT32(4);
 
-       Assert(PG_GETARG_INT32(0) == PG_LATIN2);
-       Assert(PG_GETARG_INT32(1) == PG_MULE_INTERNAL);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_LATIN2, PG_MULE_INTERNAL);
 
        latin22mic(src, dest, len);
 
@@ -72,9 +70,7 @@ mic_to_latin2(PG_FUNCTION_ARGS)
        unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
        int                     len = PG_GETARG_INT32(4);
 
-       Assert(PG_GETARG_INT32(0) == PG_MULE_INTERNAL);
-       Assert(PG_GETARG_INT32(1) == PG_LATIN2);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_MULE_INTERNAL, PG_LATIN2);
 
        mic2latin2(src, dest, len);
 
@@ -88,9 +84,7 @@ win1250_to_mic(PG_FUNCTION_ARGS)
        unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
        int                     len = PG_GETARG_INT32(4);
 
-       Assert(PG_GETARG_INT32(0) == PG_WIN1250);
-       Assert(PG_GETARG_INT32(1) == PG_MULE_INTERNAL);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_WIN1250, PG_MULE_INTERNAL);
 
        win12502mic(src, dest, len);
 
@@ -104,9 +98,7 @@ mic_to_win1250(PG_FUNCTION_ARGS)
        unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
        int                     len = PG_GETARG_INT32(4);
 
-       Assert(PG_GETARG_INT32(0) == PG_MULE_INTERNAL);
-       Assert(PG_GETARG_INT32(1) == PG_WIN1250);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_MULE_INTERNAL, PG_WIN1250);
 
        mic2win1250(src, dest, len);
 
@@ -121,9 +113,7 @@ latin2_to_win1250(PG_FUNCTION_ARGS)
        int                     len = PG_GETARG_INT32(4);
        unsigned char *buf;
 
-       Assert(PG_GETARG_INT32(0) == PG_LATIN2);
-       Assert(PG_GETARG_INT32(1) == PG_WIN1250);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_LATIN2, PG_WIN1250);
 
        buf = palloc(len * ENCODING_GROWTH_RATE);
        latin22mic(src, buf, len);
@@ -141,9 +131,7 @@ win1250_to_latin2(PG_FUNCTION_ARGS)
        int                     len = PG_GETARG_INT32(4);
        unsigned char *buf;
 
-       Assert(PG_GETARG_INT32(0) == PG_WIN1250);
-       Assert(PG_GETARG_INT32(1) == PG_LATIN2);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_WIN1250, PG_LATIN2);
 
        buf = palloc(len * ENCODING_GROWTH_RATE);
        win12502mic(src, buf, len);
index 075db5359fb909301e3be497bce534e93e07efff..b97ca6c0d2274398b096029a3c7268327f70c0a0 100644 (file)
@@ -6,7 +6,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/latin_and_mic/latin_and_mic.c,v 1.13 2006/05/30 22:12:14 tgl Exp $
+ *       $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/latin_and_mic/latin_and_mic.c,v 1.13.2.1 2009/01/29 19:24:17 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -56,9 +56,7 @@ latin1_to_mic(PG_FUNCTION_ARGS)
        unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
        int                     len = PG_GETARG_INT32(4);
 
-       Assert(PG_GETARG_INT32(0) == PG_LATIN1);
-       Assert(PG_GETARG_INT32(1) == PG_MULE_INTERNAL);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_LATIN1, PG_MULE_INTERNAL);
 
        latin12mic(src, dest, len);
 
@@ -72,9 +70,7 @@ mic_to_latin1(PG_FUNCTION_ARGS)
        unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
        int                     len = PG_GETARG_INT32(4);
 
-       Assert(PG_GETARG_INT32(0) == PG_MULE_INTERNAL);
-       Assert(PG_GETARG_INT32(1) == PG_LATIN1);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_MULE_INTERNAL, PG_LATIN1);
 
        mic2latin1(src, dest, len);
 
@@ -88,9 +84,7 @@ latin3_to_mic(PG_FUNCTION_ARGS)
        unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
        int                     len = PG_GETARG_INT32(4);
 
-       Assert(PG_GETARG_INT32(0) == PG_LATIN3);
-       Assert(PG_GETARG_INT32(1) == PG_MULE_INTERNAL);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_LATIN3, PG_MULE_INTERNAL);
 
        latin32mic(src, dest, len);
 
@@ -104,9 +98,7 @@ mic_to_latin3(PG_FUNCTION_ARGS)
        unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
        int                     len = PG_GETARG_INT32(4);
 
-       Assert(PG_GETARG_INT32(0) == PG_MULE_INTERNAL);
-       Assert(PG_GETARG_INT32(1) == PG_LATIN3);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_MULE_INTERNAL, PG_LATIN3);
 
        mic2latin3(src, dest, len);
 
@@ -120,9 +112,7 @@ latin4_to_mic(PG_FUNCTION_ARGS)
        unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
        int                     len = PG_GETARG_INT32(4);
 
-       Assert(PG_GETARG_INT32(0) == PG_LATIN4);
-       Assert(PG_GETARG_INT32(1) == PG_MULE_INTERNAL);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_LATIN4, PG_MULE_INTERNAL);
 
        latin42mic(src, dest, len);
 
@@ -136,9 +126,7 @@ mic_to_latin4(PG_FUNCTION_ARGS)
        unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
        int                     len = PG_GETARG_INT32(4);
 
-       Assert(PG_GETARG_INT32(0) == PG_MULE_INTERNAL);
-       Assert(PG_GETARG_INT32(1) == PG_LATIN4);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_MULE_INTERNAL, PG_LATIN4);
 
        mic2latin4(src, dest, len);
 
index e7e5253466569330bd48e58a76a6287a3e07f0cd..e7d194ce21c8deda91278bd761e443e155f4e897 100644 (file)
@@ -6,7 +6,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_ascii/utf8_and_ascii.c,v 1.14 2006/05/30 22:12:14 tgl Exp $
+ *       $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_ascii/utf8_and_ascii.c,v 1.14.2.1 2009/01/29 19:24:17 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -41,9 +41,7 @@ ascii_to_utf8(PG_FUNCTION_ARGS)
        unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
        int                     len = PG_GETARG_INT32(4);
 
-       Assert(PG_GETARG_INT32(0) == PG_SQL_ASCII);
-       Assert(PG_GETARG_INT32(1) == PG_UTF8);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_SQL_ASCII, PG_UTF8);
 
        /* this looks wrong, but basically we're just rejecting high-bit-set */
        pg_ascii2mic(src, dest, len);
@@ -58,9 +56,7 @@ utf8_to_ascii(PG_FUNCTION_ARGS)
        unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
        int                     len = PG_GETARG_INT32(4);
 
-       Assert(PG_GETARG_INT32(0) == PG_UTF8);
-       Assert(PG_GETARG_INT32(1) == PG_SQL_ASCII);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_UTF8, PG_SQL_ASCII);
 
        /* this looks wrong, but basically we're just rejecting high-bit-set */
        pg_mic2ascii(src, dest, len);
index adf06632f334d15740eecf5e4750a565790aa487..0066dd21d225ff459fe2594dcd2f92ebd3d89fbf 100644 (file)
@@ -6,7 +6,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_big5/utf8_and_big5.c,v 1.14 2006/05/30 22:12:14 tgl Exp $
+ *       $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_big5/utf8_and_big5.c,v 1.14.2.1 2009/01/29 19:24:17 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -42,9 +42,7 @@ big5_to_utf8(PG_FUNCTION_ARGS)
        unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
        int                     len = PG_GETARG_INT32(4);
 
-       Assert(PG_GETARG_INT32(0) == PG_BIG5);
-       Assert(PG_GETARG_INT32(1) == PG_UTF8);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_BIG5, PG_UTF8);
 
        LocalToUtf(src, dest, LUmapBIG5,
                           sizeof(LUmapBIG5) / sizeof(pg_local_to_utf), PG_BIG5, len);
@@ -59,9 +57,7 @@ utf8_to_big5(PG_FUNCTION_ARGS)
        unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
        int                     len = PG_GETARG_INT32(4);
 
-       Assert(PG_GETARG_INT32(0) == PG_UTF8);
-       Assert(PG_GETARG_INT32(1) == PG_BIG5);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_UTF8, PG_BIG5);
 
        UtfToLocal(src, dest, ULmapBIG5,
                           sizeof(ULmapBIG5) / sizeof(pg_utf_to_local), PG_BIG5, len);
index c311c1d3afa285a0830dd2fe07e9e9d23eadb60e..38a45ebd5acd31d94aff74d4aa04cb8dac72670f 100644 (file)
@@ -6,7 +6,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_cyrillic/utf8_and_cyrillic.c,v 1.17 2006/10/04 00:30:02 momjian Exp $
+ *       $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_cyrillic/utf8_and_cyrillic.c,v 1.17.2.1 2009/01/29 19:24:17 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -43,9 +43,7 @@ utf8_to_koi8r(PG_FUNCTION_ARGS)
        unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
        int                     len = PG_GETARG_INT32(4);
 
-       Assert(PG_GETARG_INT32(0) == PG_UTF8);
-       Assert(PG_GETARG_INT32(1) == PG_KOI8R);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_UTF8, PG_KOI8R);
 
        UtfToLocal(src, dest, ULmapKOI8R,
                           sizeof(ULmapKOI8R) / sizeof(pg_utf_to_local), PG_KOI8R, len);
@@ -60,9 +58,7 @@ koi8r_to_utf8(PG_FUNCTION_ARGS)
        unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
        int                     len = PG_GETARG_INT32(4);
 
-       Assert(PG_GETARG_INT32(0) == PG_KOI8R);
-       Assert(PG_GETARG_INT32(1) == PG_UTF8);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_KOI8R, PG_UTF8);
 
        LocalToUtf(src, dest, LUmapKOI8R,
                           sizeof(LUmapKOI8R) / sizeof(pg_local_to_utf), PG_KOI8R, len);
index 512143345755b7ab19a3f7cbfd40557fa90a6e17..9dc9445592d5ecb22f77d4786163d61926bdf2b2 100644 (file)
@@ -6,7 +6,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_euc_cn/utf8_and_euc_cn.c,v 1.15 2006/05/30 22:12:15 tgl Exp $
+ *       $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_euc_cn/utf8_and_euc_cn.c,v 1.15.2.1 2009/01/29 19:24:18 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -42,9 +42,7 @@ euc_cn_to_utf8(PG_FUNCTION_ARGS)
        unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
        int                     len = PG_GETARG_INT32(4);
 
-       Assert(PG_GETARG_INT32(0) == PG_EUC_CN);
-       Assert(PG_GETARG_INT32(1) == PG_UTF8);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_EUC_CN, PG_UTF8);
 
        LocalToUtf(src, dest, LUmapEUC_CN,
                           sizeof(LUmapEUC_CN) / sizeof(pg_local_to_utf), PG_EUC_CN, len);
@@ -59,9 +57,7 @@ utf8_to_euc_cn(PG_FUNCTION_ARGS)
        unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
        int                     len = PG_GETARG_INT32(4);
 
-       Assert(PG_GETARG_INT32(0) == PG_UTF8);
-       Assert(PG_GETARG_INT32(1) == PG_EUC_CN);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_UTF8, PG_EUC_CN);
 
        UtfToLocal(src, dest, ULmapEUC_CN,
                           sizeof(ULmapEUC_CN) / sizeof(pg_utf_to_local), PG_EUC_CN, len);
index 1de5bc948b46a6f49625d3e366ef3d87b950589e..a01d1cea007f1c846dee20edca031ed78e067491 100644 (file)
@@ -6,7 +6,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_euc_jp/utf8_and_euc_jp.c,v 1.15 2006/05/30 22:12:15 tgl Exp $
+ *       $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_euc_jp/utf8_and_euc_jp.c,v 1.15.2.1 2009/01/29 19:24:18 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -42,9 +42,7 @@ euc_jp_to_utf8(PG_FUNCTION_ARGS)
        unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
        int                     len = PG_GETARG_INT32(4);
 
-       Assert(PG_GETARG_INT32(0) == PG_EUC_JP);
-       Assert(PG_GETARG_INT32(1) == PG_UTF8);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_EUC_JP, PG_UTF8);
 
        LocalToUtf(src, dest, LUmapEUC_JP,
                           sizeof(LUmapEUC_JP) / sizeof(pg_local_to_utf), PG_EUC_JP, len);
@@ -59,9 +57,7 @@ utf8_to_euc_jp(PG_FUNCTION_ARGS)
        unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
        int                     len = PG_GETARG_INT32(4);
 
-       Assert(PG_GETARG_INT32(0) == PG_UTF8);
-       Assert(PG_GETARG_INT32(1) == PG_EUC_JP);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_UTF8, PG_EUC_JP);
 
        UtfToLocal(src, dest, ULmapEUC_JP,
                           sizeof(ULmapEUC_JP) / sizeof(pg_utf_to_local), PG_EUC_JP, len);
index 31b8fca8f150506de9bca9e1bad0915854da59c2..7205d567bd29d93e390a4e5707feea047bd7062f 100644 (file)
@@ -6,7 +6,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_euc_kr/utf8_and_euc_kr.c,v 1.15 2006/05/30 22:12:15 tgl Exp $
+ *       $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_euc_kr/utf8_and_euc_kr.c,v 1.15.2.1 2009/01/29 19:24:18 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -42,9 +42,7 @@ euc_kr_to_utf8(PG_FUNCTION_ARGS)
        unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
        int                     len = PG_GETARG_INT32(4);
 
-       Assert(PG_GETARG_INT32(0) == PG_EUC_KR);
-       Assert(PG_GETARG_INT32(1) == PG_UTF8);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_EUC_KR, PG_UTF8);
 
        LocalToUtf(src, dest, LUmapEUC_KR,
                           sizeof(LUmapEUC_KR) / sizeof(pg_local_to_utf), PG_EUC_KR, len);
@@ -59,9 +57,7 @@ utf8_to_euc_kr(PG_FUNCTION_ARGS)
        unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
        int                     len = PG_GETARG_INT32(4);
 
-       Assert(PG_GETARG_INT32(0) == PG_UTF8);
-       Assert(PG_GETARG_INT32(1) == PG_EUC_KR);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_UTF8, PG_EUC_KR);
 
        UtfToLocal(src, dest, ULmapEUC_KR,
                           sizeof(ULmapEUC_KR) / sizeof(pg_utf_to_local), PG_EUC_KR, len);
index ced10925ad1965e7d3fc39edb17343e9b2064a13..8a7dd30e23aa4078dfb1052d828f7efb67129616 100644 (file)
@@ -6,7 +6,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_euc_tw/utf8_and_euc_tw.c,v 1.15 2006/05/30 22:12:15 tgl Exp $
+ *       $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_euc_tw/utf8_and_euc_tw.c,v 1.15.2.1 2009/01/29 19:24:18 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -42,9 +42,7 @@ euc_tw_to_utf8(PG_FUNCTION_ARGS)
        unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
        int                     len = PG_GETARG_INT32(4);
 
-       Assert(PG_GETARG_INT32(0) == PG_EUC_TW);
-       Assert(PG_GETARG_INT32(1) == PG_UTF8);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_EUC_TW, PG_UTF8);
 
        LocalToUtf(src, dest, LUmapEUC_TW,
                           sizeof(LUmapEUC_TW) / sizeof(pg_local_to_utf), PG_EUC_TW, len);
@@ -59,9 +57,7 @@ utf8_to_euc_tw(PG_FUNCTION_ARGS)
        unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
        int                     len = PG_GETARG_INT32(4);
 
-       Assert(PG_GETARG_INT32(0) == PG_UTF8);
-       Assert(PG_GETARG_INT32(1) == PG_EUC_TW);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_UTF8, PG_EUC_TW);
 
        UtfToLocal(src, dest, ULmapEUC_TW,
                           sizeof(ULmapEUC_TW) / sizeof(pg_utf_to_local), PG_EUC_TW, len);
index b8cbe7c7c0f3f01c8214e7d131b9de72c606228c..a51809a7c32752035a0cc228755855be87cb900a 100644 (file)
@@ -6,7 +6,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_gb18030/utf8_and_gb18030.c,v 1.16 2006/10/04 00:30:02 momjian Exp $
+ *       $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_gb18030/utf8_and_gb18030.c,v 1.16.2.1 2009/01/29 19:24:18 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -42,9 +42,7 @@ gb18030_to_utf8(PG_FUNCTION_ARGS)
        unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
        int                     len = PG_GETARG_INT32(4);
 
-       Assert(PG_GETARG_INT32(0) == PG_GB18030);
-       Assert(PG_GETARG_INT32(1) == PG_UTF8);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_GB18030, PG_UTF8);
 
        LocalToUtf(src, dest, LUmapGB18030,
                        sizeof(LUmapGB18030) / sizeof(pg_local_to_utf), PG_GB18030, len);
@@ -59,9 +57,7 @@ utf8_to_gb18030(PG_FUNCTION_ARGS)
        unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
        int                     len = PG_GETARG_INT32(4);
 
-       Assert(PG_GETARG_INT32(0) == PG_UTF8);
-       Assert(PG_GETARG_INT32(1) == PG_GB18030);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_UTF8, PG_GB18030);
 
        UtfToLocal(src, dest, ULmapGB18030,
                        sizeof(ULmapGB18030) / sizeof(pg_utf_to_local), PG_GB18030, len);
index ed8181d098e73a1824113e566470c5c81b3026f0..1be49351eafc0c5b955e0b60bc8d43f998cb4566 100644 (file)
@@ -6,7 +6,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_gbk/utf8_and_gbk.c,v 1.14 2006/05/30 22:12:15 tgl Exp $
+ *       $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_gbk/utf8_and_gbk.c,v 1.14.2.1 2009/01/29 19:24:18 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -42,9 +42,7 @@ gbk_to_utf8(PG_FUNCTION_ARGS)
        unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
        int                     len = PG_GETARG_INT32(4);
 
-       Assert(PG_GETARG_INT32(0) == PG_GBK);
-       Assert(PG_GETARG_INT32(1) == PG_UTF8);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_GBK, PG_UTF8);
 
        LocalToUtf(src, dest, LUmapGBK,
                           sizeof(LUmapGBK) / sizeof(pg_local_to_utf), PG_GBK, len);
@@ -59,9 +57,7 @@ utf8_to_gbk(PG_FUNCTION_ARGS)
        unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
        int                     len = PG_GETARG_INT32(4);
 
-       Assert(PG_GETARG_INT32(0) == PG_UTF8);
-       Assert(PG_GETARG_INT32(1) == PG_GBK);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_UTF8, PG_GBK);
 
        UtfToLocal(src, dest, ULmapGBK,
                           sizeof(ULmapGBK) / sizeof(pg_utf_to_local), PG_GBK, len);
index 0951085fa5306357e0bdbdf998c53dbd3da4a873..cb56ccaf25262fbe131960081f095c7e859f2b98 100644 (file)
@@ -6,7 +6,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_iso8859/utf8_and_iso8859.c,v 1.24 2006/11/27 15:50:54 petere Exp $
+ *       $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_iso8859/utf8_and_iso8859.c,v 1.24.2.1 2009/01/29 19:24:18 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -120,8 +120,7 @@ iso8859_to_utf8(PG_FUNCTION_ARGS)
        int                     len = PG_GETARG_INT32(4);
        int                     i;
 
-       Assert(PG_GETARG_INT32(1) == PG_UTF8);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(-1, PG_UTF8);
 
        for (i = 0; i < sizeof(maps) / sizeof(pg_conv_map); i++)
        {
@@ -148,8 +147,7 @@ utf8_to_iso8859(PG_FUNCTION_ARGS)
        int                     len = PG_GETARG_INT32(4);
        int                     i;
 
-       Assert(PG_GETARG_INT32(0) == PG_UTF8);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_UTF8, -1);
 
        for (i = 0; i < sizeof(maps) / sizeof(pg_conv_map); i++)
        {
index a3746d754b1db57ee56a4b8bd751b805bafd86df..71d7533d44440f2a17cfed77581ea76806a3688d 100644 (file)
@@ -6,7 +6,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_iso8859_1/utf8_and_iso8859_1.c,v 1.18 2006/10/04 00:30:03 momjian Exp $
+ *       $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_iso8859_1/utf8_and_iso8859_1.c,v 1.18.2.1 2009/01/29 19:24:18 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -42,9 +42,7 @@ iso8859_1_to_utf8(PG_FUNCTION_ARGS)
        int                     len = PG_GETARG_INT32(4);
        unsigned short c;
 
-       Assert(PG_GETARG_INT32(0) == PG_LATIN1);
-       Assert(PG_GETARG_INT32(1) == PG_UTF8);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_LATIN1, PG_UTF8);
 
        while (len > 0)
        {
@@ -75,9 +73,7 @@ utf8_to_iso8859_1(PG_FUNCTION_ARGS)
        unsigned short c,
                                c1;
 
-       Assert(PG_GETARG_INT32(0) == PG_UTF8);
-       Assert(PG_GETARG_INT32(1) == PG_LATIN1);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_UTF8, PG_LATIN1);
 
        while (len > 0)
        {
index 5f21c6e16b761d6290bc426511b26d50aa911fe4..3dd874a9ef0282e8feb699d6a9b182bc01cb52c1 100644 (file)
@@ -6,7 +6,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_johab/utf8_and_johab.c,v 1.15 2006/05/30 22:12:15 tgl Exp $
+ *       $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_johab/utf8_and_johab.c,v 1.15.2.1 2009/01/29 19:24:18 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -42,9 +42,7 @@ johab_to_utf8(PG_FUNCTION_ARGS)
        unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
        int                     len = PG_GETARG_INT32(4);
 
-       Assert(PG_GETARG_INT32(0) == PG_JOHAB);
-       Assert(PG_GETARG_INT32(1) == PG_UTF8);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_JOHAB, PG_UTF8);
 
        LocalToUtf(src, dest, LUmapJOHAB,
                           sizeof(LUmapJOHAB) / sizeof(pg_local_to_utf), PG_JOHAB, len);
@@ -59,9 +57,7 @@ utf8_to_johab(PG_FUNCTION_ARGS)
        unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
        int                     len = PG_GETARG_INT32(4);
 
-       Assert(PG_GETARG_INT32(0) == PG_UTF8);
-       Assert(PG_GETARG_INT32(1) == PG_JOHAB);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_UTF8, PG_JOHAB);
 
        UtfToLocal(src, dest, ULmapJOHAB,
                           sizeof(ULmapJOHAB) / sizeof(pg_utf_to_local), PG_JOHAB, len);
index 061b3a9a2cb01686acc83ac877ec8d2a44153d5e..aef5f1c0e0d104d752fe2351f851cda013ee97e3 100644 (file)
@@ -6,7 +6,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_sjis/utf8_and_sjis.c,v 1.14 2006/05/30 22:12:15 tgl Exp $
+ *       $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_sjis/utf8_and_sjis.c,v 1.14.2.1 2009/01/29 19:24:18 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -42,9 +42,7 @@ sjis_to_utf8(PG_FUNCTION_ARGS)
        unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
        int                     len = PG_GETARG_INT32(4);
 
-       Assert(PG_GETARG_INT32(0) == PG_SJIS);
-       Assert(PG_GETARG_INT32(1) == PG_UTF8);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_SJIS, PG_UTF8);
 
        LocalToUtf(src, dest, LUmapSJIS,
                           sizeof(LUmapSJIS) / sizeof(pg_local_to_utf), PG_SJIS, len);
@@ -59,9 +57,7 @@ utf8_to_sjis(PG_FUNCTION_ARGS)
        unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
        int                     len = PG_GETARG_INT32(4);
 
-       Assert(PG_GETARG_INT32(0) == PG_UTF8);
-       Assert(PG_GETARG_INT32(1) == PG_SJIS);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_UTF8, PG_SJIS);
 
        UtfToLocal(src, dest, ULmapSJIS,
                           sizeof(ULmapSJIS) / sizeof(pg_utf_to_local), PG_SJIS, len);
index bc4df2f4faa471e3f01b6930482925aef66a6b62..b881eb4508d39e7e6390a433187a1d1635dbf839 100644 (file)
@@ -6,7 +6,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_uhc/utf8_and_uhc.c,v 1.14 2006/05/30 22:12:15 tgl Exp $
+ *       $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_uhc/utf8_and_uhc.c,v 1.14.2.1 2009/01/29 19:24:19 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -42,9 +42,7 @@ uhc_to_utf8(PG_FUNCTION_ARGS)
        unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
        int                     len = PG_GETARG_INT32(4);
 
-       Assert(PG_GETARG_INT32(0) == PG_UHC);
-       Assert(PG_GETARG_INT32(1) == PG_UTF8);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_UHC, PG_UTF8);
 
        LocalToUtf(src, dest, LUmapUHC,
                           sizeof(LUmapUHC) / sizeof(pg_local_to_utf), PG_UHC, len);
@@ -59,9 +57,7 @@ utf8_to_uhc(PG_FUNCTION_ARGS)
        unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
        int                     len = PG_GETARG_INT32(4);
 
-       Assert(PG_GETARG_INT32(0) == PG_UTF8);
-       Assert(PG_GETARG_INT32(1) == PG_UHC);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_UTF8, PG_UHC);
 
        UtfToLocal(src, dest, ULmapUHC,
                           sizeof(ULmapUHC) / sizeof(pg_utf_to_local), PG_UHC, len);
index 3759b68c10254898e58257f52b2cc9df2b58acf7..ec7ecfa02c4872f722749ffdd1879988d8c67ef6 100644 (file)
@@ -6,7 +6,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_win/utf8_and_win.c,v 1.8 2006/11/27 15:50:55 petere Exp $
+ *       $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_win/utf8_and_win.c,v 1.8.2.1 2009/01/29 19:24:19 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -110,8 +110,7 @@ win_to_utf8(PG_FUNCTION_ARGS)
        int                     len = PG_GETARG_INT32(4);
        int                     i;
 
-       Assert(PG_GETARG_INT32(1) == PG_UTF8);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(-1, PG_UTF8);
 
        for (i = 0; i < sizeof(maps) / sizeof(pg_conv_map); i++)
        {
@@ -138,8 +137,7 @@ utf8_to_win(PG_FUNCTION_ARGS)
        int                     len = PG_GETARG_INT32(4);
        int                     i;
 
-       Assert(PG_GETARG_INT32(0) == PG_UTF8);
-       Assert(len >= 0);
+       CHECK_ENCODING_CONVERSION_ARGS(PG_UTF8, -1);
 
        for (i = 0; i < sizeof(maps) / sizeof(pg_conv_map); i++)
        {
index 7fb5407723922d47f367e2b8975b60085cc3f29d..a99efcbadf56fe3fe2eb54da707c9314bfd995d1 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * conversion functions between pg_wchar and multibyte streams.
  * Tatsuo Ishii
- * $PostgreSQL: pgsql/src/backend/utils/mb/wchar.c,v 1.58.2.3 2008/10/27 19:37:36 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/utils/mb/wchar.c,v 1.58.2.4 2009/01/29 19:24:19 tgl Exp $
  *
  * WIN1250 client encoding updated by Pavel Behal
  *
@@ -1503,6 +1503,39 @@ pg_verify_mbstr(int encoding, const char *mbstr, int len, bool noError)
        return true;
 }
 
+/*
+ * check_encoding_conversion_args: check arguments of a conversion function
+ *
+ * "expected" arguments can be either an encoding ID or -1 to indicate that
+ * the caller will check whether it accepts the ID.
+ *
+ * Note: the errors here are not really user-facing, so elog instead of
+ * ereport seems sufficient.  Also, we trust that the "expected" encoding
+ * arguments are valid encoding IDs, but we don't trust the actuals.
+ */
+void
+check_encoding_conversion_args(int src_encoding,
+                                                          int dest_encoding,
+                                                          int len,
+                                                          int expected_src_encoding,
+                                                          int expected_dest_encoding)
+{
+       if (!PG_VALID_ENCODING(src_encoding))
+               elog(ERROR, "invalid source encoding ID: %d", src_encoding);
+       if (src_encoding != expected_src_encoding && expected_src_encoding >= 0)
+               elog(ERROR, "expected source encoding \"%s\", but got \"%s\"",
+                        pg_enc2name_tbl[expected_src_encoding].name,
+                        pg_enc2name_tbl[src_encoding].name);
+       if (!PG_VALID_ENCODING(dest_encoding))
+               elog(ERROR, "invalid destination encoding ID: %d", dest_encoding);
+       if (dest_encoding != expected_dest_encoding && expected_dest_encoding >= 0)
+               elog(ERROR, "expected destination encoding \"%s\", but got \"%s\"",
+                        pg_enc2name_tbl[expected_dest_encoding].name,
+                        pg_enc2name_tbl[dest_encoding].name);
+       if (len < 0)
+               elog(ERROR, "encoding conversion length must not be negative");
+}
+
 /*
  * report_invalid_encoding: complain about invalid multibyte character
  *
index 2d465a1b38be38af206fdbfddd8bdd57e2aa71a5..88304b5f69c54b176acc915304ca9a1fa418ea47 100644 (file)
@@ -1,4 +1,4 @@
-/* $PostgreSQL: pgsql/src/include/mb/pg_wchar.h,v 1.69 2006/10/04 00:30:09 momjian Exp $ */
+/* $PostgreSQL: pgsql/src/include/mb/pg_wchar.h,v 1.69.2.1 2009/01/29 19:24:19 tgl Exp $ */
 
 #ifndef PG_WCHAR_H
 #define PG_WCHAR_H
@@ -291,6 +291,19 @@ typedef struct
        unsigned int utf;                       /* UTF8 */
 } pg_local_to_utf;
 
+/*
+ * Support macro for encoding conversion functions to validate their
+ * arguments.  (This could be made more compact if we included fmgr.h
+ * here, but we don't want to do that because this header file is also
+ * used by frontends.)
+ */
+#define CHECK_ENCODING_CONVERSION_ARGS(srcencoding,destencoding) \
+       check_encoding_conversion_args(PG_GETARG_INT32(0), \
+                                                                  PG_GETARG_INT32(1), \
+                                                                  PG_GETARG_INT32(4), \
+                                                                  (srcencoding), \
+                                                                  (destencoding))
+
 extern int     pg_mb2wchar(const char *from, pg_wchar *to);
 extern int     pg_mb2wchar_with_len(const char *from, pg_wchar *to, int len);
 extern int     pg_char_and_wchar_strcmp(const char *s1, const pg_wchar *s2);
@@ -345,6 +358,12 @@ extern bool pg_verifymbstr(const char *mbstr, int len, bool noError);
 extern bool pg_verify_mbstr(int encoding, const char *mbstr, int len,
                                bool noError);
 
+extern void check_encoding_conversion_args(int src_encoding,
+                                                                                  int dest_encoding,
+                                                                                  int len,
+                                                                                  int expected_src_encoding,
+                                                                                  int expected_dest_encoding);
+
 extern void report_invalid_encoding(int encoding, const char *mbstr, int len);
 extern void report_untranslatable_char(int src_encoding, int dest_encoding,
                                                   const char *mbstr, int len);