Commit 0d65eea3 authored by Tom Lane's avatar Tom Lane

Replace argument-checking Asserts with regular test-and-elog checks in all

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.
parent b5b31348
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/ascii_and_mic/ascii_and_mic.c,v 1.15 2009/01/01 17:23:51 momjian Exp $ * $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/ascii_and_mic/ascii_and_mic.c,v 1.16 2009/01/29 19:23:39 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -41,9 +41,7 @@ ascii_to_mic(PG_FUNCTION_ARGS) ...@@ -41,9 +41,7 @@ ascii_to_mic(PG_FUNCTION_ARGS)
unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3); unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
Assert(PG_GETARG_INT32(0) == PG_SQL_ASCII); CHECK_ENCODING_CONVERSION_ARGS(PG_SQL_ASCII, PG_MULE_INTERNAL);
Assert(PG_GETARG_INT32(1) == PG_MULE_INTERNAL);
Assert(len >= 0);
pg_ascii2mic(src, dest, len); pg_ascii2mic(src, dest, len);
...@@ -57,9 +55,7 @@ mic_to_ascii(PG_FUNCTION_ARGS) ...@@ -57,9 +55,7 @@ mic_to_ascii(PG_FUNCTION_ARGS)
unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3); unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
Assert(PG_GETARG_INT32(0) == PG_MULE_INTERNAL); CHECK_ENCODING_CONVERSION_ARGS(PG_MULE_INTERNAL, PG_SQL_ASCII);
Assert(PG_GETARG_INT32(1) == PG_SQL_ASCII);
Assert(len >= 0);
pg_mic2ascii(src, dest, len); pg_mic2ascii(src, dest, len);
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/cyrillic_and_mic/cyrillic_and_mic.c,v 1.18 2009/01/01 17:23:51 momjian Exp $ * $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/cyrillic_and_mic/cyrillic_and_mic.c,v 1.19 2009/01/29 19:23:39 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -88,9 +88,7 @@ koi8r_to_mic(PG_FUNCTION_ARGS) ...@@ -88,9 +88,7 @@ koi8r_to_mic(PG_FUNCTION_ARGS)
unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3); unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
Assert(PG_GETARG_INT32(0) == PG_KOI8R); CHECK_ENCODING_CONVERSION_ARGS(PG_KOI8R, PG_MULE_INTERNAL);
Assert(PG_GETARG_INT32(1) == PG_MULE_INTERNAL);
Assert(len >= 0);
koi8r2mic(src, dest, len); koi8r2mic(src, dest, len);
...@@ -104,9 +102,7 @@ mic_to_koi8r(PG_FUNCTION_ARGS) ...@@ -104,9 +102,7 @@ mic_to_koi8r(PG_FUNCTION_ARGS)
unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3); unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
Assert(PG_GETARG_INT32(0) == PG_MULE_INTERNAL); CHECK_ENCODING_CONVERSION_ARGS(PG_MULE_INTERNAL, PG_KOI8R);
Assert(PG_GETARG_INT32(1) == PG_KOI8R);
Assert(len >= 0);
mic2koi8r(src, dest, len); mic2koi8r(src, dest, len);
...@@ -120,9 +116,7 @@ iso_to_mic(PG_FUNCTION_ARGS) ...@@ -120,9 +116,7 @@ iso_to_mic(PG_FUNCTION_ARGS)
unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3); unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
Assert(PG_GETARG_INT32(0) == PG_ISO_8859_5); CHECK_ENCODING_CONVERSION_ARGS(PG_ISO_8859_5, PG_MULE_INTERNAL);
Assert(PG_GETARG_INT32(1) == PG_MULE_INTERNAL);
Assert(len >= 0);
iso2mic(src, dest, len); iso2mic(src, dest, len);
...@@ -136,9 +130,7 @@ mic_to_iso(PG_FUNCTION_ARGS) ...@@ -136,9 +130,7 @@ mic_to_iso(PG_FUNCTION_ARGS)
unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3); unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
Assert(PG_GETARG_INT32(0) == PG_MULE_INTERNAL); CHECK_ENCODING_CONVERSION_ARGS(PG_MULE_INTERNAL, PG_ISO_8859_5);
Assert(PG_GETARG_INT32(1) == PG_ISO_8859_5);
Assert(len >= 0);
mic2iso(src, dest, len); mic2iso(src, dest, len);
...@@ -152,9 +144,7 @@ win1251_to_mic(PG_FUNCTION_ARGS) ...@@ -152,9 +144,7 @@ win1251_to_mic(PG_FUNCTION_ARGS)
unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3); unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
Assert(PG_GETARG_INT32(0) == PG_WIN1251); CHECK_ENCODING_CONVERSION_ARGS(PG_WIN1251, PG_MULE_INTERNAL);
Assert(PG_GETARG_INT32(1) == PG_MULE_INTERNAL);
Assert(len >= 0);
win12512mic(src, dest, len); win12512mic(src, dest, len);
...@@ -168,9 +158,7 @@ mic_to_win1251(PG_FUNCTION_ARGS) ...@@ -168,9 +158,7 @@ mic_to_win1251(PG_FUNCTION_ARGS)
unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3); unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
Assert(PG_GETARG_INT32(0) == PG_MULE_INTERNAL); CHECK_ENCODING_CONVERSION_ARGS(PG_MULE_INTERNAL, PG_WIN1251);
Assert(PG_GETARG_INT32(1) == PG_WIN1251);
Assert(len >= 0);
mic2win1251(src, dest, len); mic2win1251(src, dest, len);
...@@ -184,9 +172,7 @@ win866_to_mic(PG_FUNCTION_ARGS) ...@@ -184,9 +172,7 @@ win866_to_mic(PG_FUNCTION_ARGS)
unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3); unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
Assert(PG_GETARG_INT32(0) == PG_WIN866); CHECK_ENCODING_CONVERSION_ARGS(PG_WIN866, PG_MULE_INTERNAL);
Assert(PG_GETARG_INT32(1) == PG_MULE_INTERNAL);
Assert(len >= 0);
win8662mic(src, dest, len); win8662mic(src, dest, len);
...@@ -200,9 +186,7 @@ mic_to_win866(PG_FUNCTION_ARGS) ...@@ -200,9 +186,7 @@ mic_to_win866(PG_FUNCTION_ARGS)
unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3); unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
Assert(PG_GETARG_INT32(0) == PG_MULE_INTERNAL); CHECK_ENCODING_CONVERSION_ARGS(PG_MULE_INTERNAL, PG_WIN866);
Assert(PG_GETARG_INT32(1) == PG_WIN866);
Assert(len >= 0);
mic2win866(src, dest, len); mic2win866(src, dest, len);
...@@ -217,9 +201,7 @@ koi8r_to_win1251(PG_FUNCTION_ARGS) ...@@ -217,9 +201,7 @@ koi8r_to_win1251(PG_FUNCTION_ARGS)
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
unsigned char *buf; unsigned char *buf;
Assert(PG_GETARG_INT32(0) == PG_KOI8R); CHECK_ENCODING_CONVERSION_ARGS(PG_KOI8R, PG_WIN1251);
Assert(PG_GETARG_INT32(1) == PG_WIN1251);
Assert(len >= 0);
buf = palloc(len * ENCODING_GROWTH_RATE); buf = palloc(len * ENCODING_GROWTH_RATE);
koi8r2mic(src, buf, len); koi8r2mic(src, buf, len);
...@@ -237,9 +219,7 @@ win1251_to_koi8r(PG_FUNCTION_ARGS) ...@@ -237,9 +219,7 @@ win1251_to_koi8r(PG_FUNCTION_ARGS)
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
unsigned char *buf; unsigned char *buf;
Assert(PG_GETARG_INT32(0) == PG_WIN1251); CHECK_ENCODING_CONVERSION_ARGS(PG_WIN1251, PG_KOI8R);
Assert(PG_GETARG_INT32(1) == PG_KOI8R);
Assert(len >= 0);
buf = palloc(len * ENCODING_GROWTH_RATE); buf = palloc(len * ENCODING_GROWTH_RATE);
win12512mic(src, buf, len); win12512mic(src, buf, len);
...@@ -257,9 +237,7 @@ koi8r_to_win866(PG_FUNCTION_ARGS) ...@@ -257,9 +237,7 @@ koi8r_to_win866(PG_FUNCTION_ARGS)
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
unsigned char *buf; unsigned char *buf;
Assert(PG_GETARG_INT32(0) == PG_KOI8R); CHECK_ENCODING_CONVERSION_ARGS(PG_KOI8R, PG_WIN866);
Assert(PG_GETARG_INT32(1) == PG_WIN866);
Assert(len >= 0);
buf = palloc(len * ENCODING_GROWTH_RATE); buf = palloc(len * ENCODING_GROWTH_RATE);
koi8r2mic(src, buf, len); koi8r2mic(src, buf, len);
...@@ -277,9 +255,7 @@ win866_to_koi8r(PG_FUNCTION_ARGS) ...@@ -277,9 +255,7 @@ win866_to_koi8r(PG_FUNCTION_ARGS)
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
unsigned char *buf; unsigned char *buf;
Assert(PG_GETARG_INT32(0) == PG_WIN866); CHECK_ENCODING_CONVERSION_ARGS(PG_WIN866, PG_KOI8R);
Assert(PG_GETARG_INT32(1) == PG_KOI8R);
Assert(len >= 0);
buf = palloc(len * ENCODING_GROWTH_RATE); buf = palloc(len * ENCODING_GROWTH_RATE);
win8662mic(src, buf, len); win8662mic(src, buf, len);
...@@ -297,9 +273,7 @@ win866_to_win1251(PG_FUNCTION_ARGS) ...@@ -297,9 +273,7 @@ win866_to_win1251(PG_FUNCTION_ARGS)
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
unsigned char *buf; unsigned char *buf;
Assert(PG_GETARG_INT32(0) == PG_WIN866); CHECK_ENCODING_CONVERSION_ARGS(PG_WIN866, PG_WIN1251);
Assert(PG_GETARG_INT32(1) == PG_WIN1251);
Assert(len >= 0);
/* /*
* Note: There are a few characters like the "Numero" sign that exist in * Note: There are a few characters like the "Numero" sign that exist in
...@@ -323,9 +297,7 @@ win1251_to_win866(PG_FUNCTION_ARGS) ...@@ -323,9 +297,7 @@ win1251_to_win866(PG_FUNCTION_ARGS)
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
unsigned char *buf; unsigned char *buf;
Assert(PG_GETARG_INT32(0) == PG_WIN1251); CHECK_ENCODING_CONVERSION_ARGS(PG_WIN1251, PG_WIN866);
Assert(PG_GETARG_INT32(1) == PG_WIN866);
Assert(len >= 0);
/* Use mic/KOI8R as intermediary, see comment in win866_to_win1251() */ /* Use mic/KOI8R as intermediary, see comment in win866_to_win1251() */
buf = palloc(len * ENCODING_GROWTH_RATE); buf = palloc(len * ENCODING_GROWTH_RATE);
...@@ -344,9 +316,7 @@ iso_to_koi8r(PG_FUNCTION_ARGS) ...@@ -344,9 +316,7 @@ iso_to_koi8r(PG_FUNCTION_ARGS)
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
unsigned char *buf; unsigned char *buf;
Assert(PG_GETARG_INT32(0) == PG_ISO_8859_5); CHECK_ENCODING_CONVERSION_ARGS(PG_ISO_8859_5, PG_KOI8R);
Assert(PG_GETARG_INT32(1) == PG_KOI8R);
Assert(len >= 0);
buf = palloc(len * ENCODING_GROWTH_RATE); buf = palloc(len * ENCODING_GROWTH_RATE);
iso2mic(src, buf, len); iso2mic(src, buf, len);
...@@ -364,9 +334,7 @@ koi8r_to_iso(PG_FUNCTION_ARGS) ...@@ -364,9 +334,7 @@ koi8r_to_iso(PG_FUNCTION_ARGS)
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
unsigned char *buf; unsigned char *buf;
Assert(PG_GETARG_INT32(0) == PG_KOI8R); CHECK_ENCODING_CONVERSION_ARGS(PG_KOI8R, PG_ISO_8859_5);
Assert(PG_GETARG_INT32(1) == PG_ISO_8859_5);
Assert(len >= 0);
buf = palloc(len * ENCODING_GROWTH_RATE); buf = palloc(len * ENCODING_GROWTH_RATE);
koi8r2mic(src, buf, len); koi8r2mic(src, buf, len);
...@@ -384,9 +352,7 @@ iso_to_win1251(PG_FUNCTION_ARGS) ...@@ -384,9 +352,7 @@ iso_to_win1251(PG_FUNCTION_ARGS)
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
unsigned char *buf; unsigned char *buf;
Assert(PG_GETARG_INT32(0) == PG_ISO_8859_5); CHECK_ENCODING_CONVERSION_ARGS(PG_ISO_8859_5, PG_WIN1251);
Assert(PG_GETARG_INT32(1) == PG_WIN1251);
Assert(len >= 0);
/* Use mic/KOI8R as intermediary, see comment in win866_to_win1251() */ /* Use mic/KOI8R as intermediary, see comment in win866_to_win1251() */
buf = palloc(len * ENCODING_GROWTH_RATE); buf = palloc(len * ENCODING_GROWTH_RATE);
...@@ -405,9 +371,7 @@ win1251_to_iso(PG_FUNCTION_ARGS) ...@@ -405,9 +371,7 @@ win1251_to_iso(PG_FUNCTION_ARGS)
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
unsigned char *buf; unsigned char *buf;
Assert(PG_GETARG_INT32(0) == PG_WIN1251); CHECK_ENCODING_CONVERSION_ARGS(PG_WIN1251, PG_ISO_8859_5);
Assert(PG_GETARG_INT32(1) == PG_ISO_8859_5);
Assert(len >= 0);
/* Use mic/KOI8R as intermediary, see comment in win866_to_win1251() */ /* Use mic/KOI8R as intermediary, see comment in win866_to_win1251() */
buf = palloc(len * ENCODING_GROWTH_RATE); buf = palloc(len * ENCODING_GROWTH_RATE);
...@@ -426,9 +390,7 @@ iso_to_win866(PG_FUNCTION_ARGS) ...@@ -426,9 +390,7 @@ iso_to_win866(PG_FUNCTION_ARGS)
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
unsigned char *buf; unsigned char *buf;
Assert(PG_GETARG_INT32(0) == PG_ISO_8859_5); CHECK_ENCODING_CONVERSION_ARGS(PG_ISO_8859_5, PG_WIN866);
Assert(PG_GETARG_INT32(1) == PG_WIN866);
Assert(len >= 0);
/* Use mic/KOI8R as intermediary, see comment in win866_to_win1251() */ /* Use mic/KOI8R as intermediary, see comment in win866_to_win1251() */
buf = palloc(len * ENCODING_GROWTH_RATE); buf = palloc(len * ENCODING_GROWTH_RATE);
...@@ -447,9 +409,7 @@ win866_to_iso(PG_FUNCTION_ARGS) ...@@ -447,9 +409,7 @@ win866_to_iso(PG_FUNCTION_ARGS)
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
unsigned char *buf; unsigned char *buf;
Assert(PG_GETARG_INT32(0) == PG_WIN866); CHECK_ENCODING_CONVERSION_ARGS(PG_WIN866, PG_ISO_8859_5);
Assert(PG_GETARG_INT32(1) == PG_ISO_8859_5);
Assert(len >= 0);
/* Use mic/KOI8R as intermediary, see comment in win866_to_win1251() */ /* Use mic/KOI8R as intermediary, see comment in win866_to_win1251() */
buf = palloc(len * ENCODING_GROWTH_RATE); buf = palloc(len * ENCODING_GROWTH_RATE);
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/euc_cn_and_mic/euc_cn_and_mic.c,v 1.18 2009/01/01 17:23:51 momjian Exp $ * $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/euc_cn_and_mic/euc_cn_and_mic.c,v 1.19 2009/01/29 19:23:39 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -44,9 +44,7 @@ euc_cn_to_mic(PG_FUNCTION_ARGS) ...@@ -44,9 +44,7 @@ euc_cn_to_mic(PG_FUNCTION_ARGS)
unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3); unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
Assert(PG_GETARG_INT32(0) == PG_EUC_CN); CHECK_ENCODING_CONVERSION_ARGS(PG_EUC_CN, PG_MULE_INTERNAL);
Assert(PG_GETARG_INT32(1) == PG_MULE_INTERNAL);
Assert(len >= 0);
euc_cn2mic(src, dest, len); euc_cn2mic(src, dest, len);
...@@ -60,9 +58,7 @@ mic_to_euc_cn(PG_FUNCTION_ARGS) ...@@ -60,9 +58,7 @@ mic_to_euc_cn(PG_FUNCTION_ARGS)
unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3); unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
Assert(PG_GETARG_INT32(0) == PG_MULE_INTERNAL); CHECK_ENCODING_CONVERSION_ARGS(PG_MULE_INTERNAL, PG_EUC_CN);
Assert(PG_GETARG_INT32(1) == PG_EUC_CN);
Assert(len >= 0);
mic2euc_cn(src, dest, len); mic2euc_cn(src, dest, len);
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
* Copyright (c) 2007-2009, PostgreSQL Global Development Group * Copyright (c) 2007-2009, PostgreSQL Global Development Group
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/euc_jis_2004_and_shift_jis_2004/euc_jis_2004_and_shift_jis_2004.c,v 1.5 2009/01/01 17:23:51 momjian Exp $ * $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/euc_jis_2004_and_shift_jis_2004/euc_jis_2004_and_shift_jis_2004.c,v 1.6 2009/01/29 19:23:39 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -43,9 +43,7 @@ euc_jis_2004_to_shift_jis_2004(PG_FUNCTION_ARGS) ...@@ -43,9 +43,7 @@ euc_jis_2004_to_shift_jis_2004(PG_FUNCTION_ARGS)
unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3); unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
Assert(PG_GETARG_INT32(0) == PG_EUC_JIS_2004); CHECK_ENCODING_CONVERSION_ARGS(PG_EUC_JIS_2004, PG_SHIFT_JIS_2004);
Assert(PG_GETARG_INT32(1) == PG_SHIFT_JIS_2004);
Assert(len >= 0);
euc_jis_20042shift_jis_2004(src, dest, len); euc_jis_20042shift_jis_2004(src, dest, len);
...@@ -59,9 +57,7 @@ shift_jis_2004_to_euc_jis_2004(PG_FUNCTION_ARGS) ...@@ -59,9 +57,7 @@ shift_jis_2004_to_euc_jis_2004(PG_FUNCTION_ARGS)
unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3); unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
Assert(PG_GETARG_INT32(0) == PG_SHIFT_JIS_2004); CHECK_ENCODING_CONVERSION_ARGS(PG_SHIFT_JIS_2004, PG_EUC_JIS_2004);
Assert(PG_GETARG_INT32(1) == PG_EUC_JIS_2004);
Assert(len >= 0);
shift_jis_20042euc_jis_2004(src, dest, len); shift_jis_20042euc_jis_2004(src, dest, len);
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/euc_jp_and_sjis/euc_jp_and_sjis.c,v 1.20 2009/01/01 17:23:51 momjian Exp $ * $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/euc_jp_and_sjis/euc_jp_and_sjis.c,v 1.21 2009/01/29 19:23:39 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -70,9 +70,7 @@ euc_jp_to_sjis(PG_FUNCTION_ARGS) ...@@ -70,9 +70,7 @@ euc_jp_to_sjis(PG_FUNCTION_ARGS)
unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3); unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
Assert(PG_GETARG_INT32(0) == PG_EUC_JP); CHECK_ENCODING_CONVERSION_ARGS(PG_EUC_JP, PG_SJIS);
Assert(PG_GETARG_INT32(1) == PG_SJIS);
Assert(len >= 0);
euc_jp2sjis(src, dest, len); euc_jp2sjis(src, dest, len);
...@@ -86,9 +84,7 @@ sjis_to_euc_jp(PG_FUNCTION_ARGS) ...@@ -86,9 +84,7 @@ sjis_to_euc_jp(PG_FUNCTION_ARGS)
unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3); unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
Assert(PG_GETARG_INT32(0) == PG_SJIS); CHECK_ENCODING_CONVERSION_ARGS(PG_SJIS, PG_EUC_JP);
Assert(PG_GETARG_INT32(1) == PG_EUC_JP);
Assert(len >= 0);
sjis2euc_jp(src, dest, len); sjis2euc_jp(src, dest, len);
...@@ -102,9 +98,7 @@ euc_jp_to_mic(PG_FUNCTION_ARGS) ...@@ -102,9 +98,7 @@ euc_jp_to_mic(PG_FUNCTION_ARGS)
unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3); unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
Assert(PG_GETARG_INT32(0) == PG_EUC_JP); CHECK_ENCODING_CONVERSION_ARGS(PG_EUC_JP, PG_MULE_INTERNAL);
Assert(PG_GETARG_INT32(1) == PG_MULE_INTERNAL);
Assert(len >= 0);
euc_jp2mic(src, dest, len); euc_jp2mic(src, dest, len);
...@@ -118,9 +112,7 @@ mic_to_euc_jp(PG_FUNCTION_ARGS) ...@@ -118,9 +112,7 @@ mic_to_euc_jp(PG_FUNCTION_ARGS)
unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3); unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
Assert(PG_GETARG_INT32(0) == PG_MULE_INTERNAL); CHECK_ENCODING_CONVERSION_ARGS(PG_MULE_INTERNAL, PG_EUC_JP);
Assert(PG_GETARG_INT32(1) == PG_EUC_JP);
Assert(len >= 0);
mic2euc_jp(src, dest, len); mic2euc_jp(src, dest, len);
...@@ -134,9 +126,7 @@ sjis_to_mic(PG_FUNCTION_ARGS) ...@@ -134,9 +126,7 @@ sjis_to_mic(PG_FUNCTION_ARGS)
unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3); unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
Assert(PG_GETARG_INT32(0) == PG_SJIS); CHECK_ENCODING_CONVERSION_ARGS(PG_SJIS, PG_MULE_INTERNAL);
Assert(PG_GETARG_INT32(1) == PG_MULE_INTERNAL);
Assert(len >= 0);
sjis2mic(src, dest, len); sjis2mic(src, dest, len);
...@@ -150,9 +140,7 @@ mic_to_sjis(PG_FUNCTION_ARGS) ...@@ -150,9 +140,7 @@ mic_to_sjis(PG_FUNCTION_ARGS)
unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3); unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
Assert(PG_GETARG_INT32(0) == PG_MULE_INTERNAL); CHECK_ENCODING_CONVERSION_ARGS(PG_MULE_INTERNAL, PG_SJIS);
Assert(PG_GETARG_INT32(1) == PG_SJIS);
Assert(len >= 0);
mic2sjis(src, dest, len); mic2sjis(src, dest, len);
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/euc_kr_and_mic/euc_kr_and_mic.c,v 1.18 2009/01/01 17:23:51 momjian Exp $ * $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/euc_kr_and_mic/euc_kr_and_mic.c,v 1.19 2009/01/29 19:23:39 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -44,9 +44,7 @@ euc_kr_to_mic(PG_FUNCTION_ARGS) ...@@ -44,9 +44,7 @@ euc_kr_to_mic(PG_FUNCTION_ARGS)
unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3); unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
Assert(PG_GETARG_INT32(0) == PG_EUC_KR); CHECK_ENCODING_CONVERSION_ARGS(PG_EUC_KR, PG_MULE_INTERNAL);
Assert(PG_GETARG_INT32(1) == PG_MULE_INTERNAL);
Assert(len >= 0);
euc_kr2mic(src, dest, len); euc_kr2mic(src, dest, len);
...@@ -60,9 +58,7 @@ mic_to_euc_kr(PG_FUNCTION_ARGS) ...@@ -60,9 +58,7 @@ mic_to_euc_kr(PG_FUNCTION_ARGS)
unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3); unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
Assert(PG_GETARG_INT32(0) == PG_MULE_INTERNAL); CHECK_ENCODING_CONVERSION_ARGS(PG_MULE_INTERNAL, PG_EUC_KR);
Assert(PG_GETARG_INT32(1) == PG_EUC_KR);
Assert(len >= 0);
mic2euc_kr(src, dest, len); mic2euc_kr(src, dest, len);
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/euc_tw_and_big5/euc_tw_and_big5.c,v 1.19 2009/01/01 17:23:52 momjian Exp $ * $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/euc_tw_and_big5/euc_tw_and_big5.c,v 1.20 2009/01/29 19:23:39 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -57,9 +57,7 @@ euc_tw_to_big5(PG_FUNCTION_ARGS) ...@@ -57,9 +57,7 @@ euc_tw_to_big5(PG_FUNCTION_ARGS)
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
unsigned char *buf; unsigned char *buf;
Assert(PG_GETARG_INT32(0) == PG_EUC_TW); CHECK_ENCODING_CONVERSION_ARGS(PG_EUC_TW, PG_BIG5);
Assert(PG_GETARG_INT32(1) == PG_BIG5);
Assert(len >= 0);
buf = palloc(len * ENCODING_GROWTH_RATE); buf = palloc(len * ENCODING_GROWTH_RATE);
euc_tw2mic(src, buf, len); euc_tw2mic(src, buf, len);
...@@ -77,9 +75,7 @@ big5_to_euc_tw(PG_FUNCTION_ARGS) ...@@ -77,9 +75,7 @@ big5_to_euc_tw(PG_FUNCTION_ARGS)
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
unsigned char *buf; unsigned char *buf;
Assert(PG_GETARG_INT32(0) == PG_BIG5); CHECK_ENCODING_CONVERSION_ARGS(PG_BIG5, PG_EUC_TW);
Assert(PG_GETARG_INT32(1) == PG_EUC_TW);
Assert(len >= 0);
buf = palloc(len * ENCODING_GROWTH_RATE); buf = palloc(len * ENCODING_GROWTH_RATE);
big52mic(src, buf, len); big52mic(src, buf, len);
...@@ -96,9 +92,7 @@ euc_tw_to_mic(PG_FUNCTION_ARGS) ...@@ -96,9 +92,7 @@ euc_tw_to_mic(PG_FUNCTION_ARGS)
unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3); unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
Assert(PG_GETARG_INT32(0) == PG_EUC_TW); CHECK_ENCODING_CONVERSION_ARGS(PG_EUC_TW, PG_MULE_INTERNAL);
Assert(PG_GETARG_INT32(1) == PG_MULE_INTERNAL);
Assert(len >= 0);
euc_tw2mic(src, dest, len); euc_tw2mic(src, dest, len);
...@@ -112,9 +106,7 @@ mic_to_euc_tw(PG_FUNCTION_ARGS) ...@@ -112,9 +106,7 @@ mic_to_euc_tw(PG_FUNCTION_ARGS)
unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3); unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
Assert(PG_GETARG_INT32(0) == PG_MULE_INTERNAL); CHECK_ENCODING_CONVERSION_ARGS(PG_MULE_INTERNAL, PG_EUC_TW);
Assert(PG_GETARG_INT32(1) == PG_EUC_TW);
Assert(len >= 0);
mic2euc_tw(src, dest, len); mic2euc_tw(src, dest, len);
...@@ -128,9 +120,7 @@ big5_to_mic(PG_FUNCTION_ARGS) ...@@ -128,9 +120,7 @@ big5_to_mic(PG_FUNCTION_ARGS)
unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3); unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
Assert(PG_GETARG_INT32(0) == PG_BIG5); CHECK_ENCODING_CONVERSION_ARGS(PG_BIG5, PG_MULE_INTERNAL);
Assert(PG_GETARG_INT32(1) == PG_MULE_INTERNAL);
Assert(len >= 0);
big52mic(src, dest, len); big52mic(src, dest, len);
...@@ -144,9 +134,7 @@ mic_to_big5(PG_FUNCTION_ARGS) ...@@ -144,9 +134,7 @@ mic_to_big5(PG_FUNCTION_ARGS)
unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3); unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
Assert(PG_GETARG_INT32(0) == PG_MULE_INTERNAL); CHECK_ENCODING_CONVERSION_ARGS(PG_MULE_INTERNAL, PG_BIG5);
Assert(PG_GETARG_INT32(1) == PG_BIG5);
Assert(len >= 0);
mic2big5(src, dest, len); mic2big5(src, dest, len);
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/latin2_and_win1250/latin2_and_win1250.c,v 1.16 2009/01/01 17:23:52 momjian Exp $ * $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/latin2_and_win1250/latin2_and_win1250.c,v 1.17 2009/01/29 19:23:39 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -56,9 +56,7 @@ latin2_to_mic(PG_FUNCTION_ARGS) ...@@ -56,9 +56,7 @@ latin2_to_mic(PG_FUNCTION_ARGS)
unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3); unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
Assert(PG_GETARG_INT32(0) == PG_LATIN2); CHECK_ENCODING_CONVERSION_ARGS(PG_LATIN2, PG_MULE_INTERNAL);
Assert(PG_GETARG_INT32(1) == PG_MULE_INTERNAL);
Assert(len >= 0);
latin22mic(src, dest, len); latin22mic(src, dest, len);
...@@ -72,9 +70,7 @@ mic_to_latin2(PG_FUNCTION_ARGS) ...@@ -72,9 +70,7 @@ mic_to_latin2(PG_FUNCTION_ARGS)
unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3); unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
Assert(PG_GETARG_INT32(0) == PG_MULE_INTERNAL); CHECK_ENCODING_CONVERSION_ARGS(PG_MULE_INTERNAL, PG_LATIN2);
Assert(PG_GETARG_INT32(1) == PG_LATIN2);
Assert(len >= 0);
mic2latin2(src, dest, len); mic2latin2(src, dest, len);
...@@ -88,9 +84,7 @@ win1250_to_mic(PG_FUNCTION_ARGS) ...@@ -88,9 +84,7 @@ win1250_to_mic(PG_FUNCTION_ARGS)
unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3); unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
Assert(PG_GETARG_INT32(0) == PG_WIN1250); CHECK_ENCODING_CONVERSION_ARGS(PG_WIN1250, PG_MULE_INTERNAL);
Assert(PG_GETARG_INT32(1) == PG_MULE_INTERNAL);
Assert(len >= 0);
win12502mic(src, dest, len); win12502mic(src, dest, len);
...@@ -104,9 +98,7 @@ mic_to_win1250(PG_FUNCTION_ARGS) ...@@ -104,9 +98,7 @@ mic_to_win1250(PG_FUNCTION_ARGS)
unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3); unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
Assert(PG_GETARG_INT32(0) == PG_MULE_INTERNAL); CHECK_ENCODING_CONVERSION_ARGS(PG_MULE_INTERNAL, PG_WIN1250);
Assert(PG_GETARG_INT32(1) == PG_WIN1250);
Assert(len >= 0);
mic2win1250(src, dest, len); mic2win1250(src, dest, len);
...@@ -121,9 +113,7 @@ latin2_to_win1250(PG_FUNCTION_ARGS) ...@@ -121,9 +113,7 @@ latin2_to_win1250(PG_FUNCTION_ARGS)
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
unsigned char *buf; unsigned char *buf;
Assert(PG_GETARG_INT32(0) == PG_LATIN2); CHECK_ENCODING_CONVERSION_ARGS(PG_LATIN2, PG_WIN1250);
Assert(PG_GETARG_INT32(1) == PG_WIN1250);
Assert(len >= 0);
buf = palloc(len * ENCODING_GROWTH_RATE); buf = palloc(len * ENCODING_GROWTH_RATE);
latin22mic(src, buf, len); latin22mic(src, buf, len);
...@@ -141,9 +131,7 @@ win1250_to_latin2(PG_FUNCTION_ARGS) ...@@ -141,9 +131,7 @@ win1250_to_latin2(PG_FUNCTION_ARGS)
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
unsigned char *buf; unsigned char *buf;
Assert(PG_GETARG_INT32(0) == PG_WIN1250); CHECK_ENCODING_CONVERSION_ARGS(PG_WIN1250, PG_LATIN2);
Assert(PG_GETARG_INT32(1) == PG_LATIN2);
Assert(len >= 0);
buf = palloc(len * ENCODING_GROWTH_RATE); buf = palloc(len * ENCODING_GROWTH_RATE);
win12502mic(src, buf, len); win12502mic(src, buf, len);
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/latin_and_mic/latin_and_mic.c,v 1.16 2009/01/01 17:23:52 momjian Exp $ * $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/latin_and_mic/latin_and_mic.c,v 1.17 2009/01/29 19:23:39 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -56,9 +56,7 @@ latin1_to_mic(PG_FUNCTION_ARGS) ...@@ -56,9 +56,7 @@ latin1_to_mic(PG_FUNCTION_ARGS)
unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3); unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
Assert(PG_GETARG_INT32(0) == PG_LATIN1); CHECK_ENCODING_CONVERSION_ARGS(PG_LATIN1, PG_MULE_INTERNAL);
Assert(PG_GETARG_INT32(1) == PG_MULE_INTERNAL);
Assert(len >= 0);
latin12mic(src, dest, len); latin12mic(src, dest, len);
...@@ -72,9 +70,7 @@ mic_to_latin1(PG_FUNCTION_ARGS) ...@@ -72,9 +70,7 @@ mic_to_latin1(PG_FUNCTION_ARGS)
unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3); unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
Assert(PG_GETARG_INT32(0) == PG_MULE_INTERNAL); CHECK_ENCODING_CONVERSION_ARGS(PG_MULE_INTERNAL, PG_LATIN1);
Assert(PG_GETARG_INT32(1) == PG_LATIN1);
Assert(len >= 0);
mic2latin1(src, dest, len); mic2latin1(src, dest, len);
...@@ -88,9 +84,7 @@ latin3_to_mic(PG_FUNCTION_ARGS) ...@@ -88,9 +84,7 @@ latin3_to_mic(PG_FUNCTION_ARGS)
unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3); unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
Assert(PG_GETARG_INT32(0) == PG_LATIN3); CHECK_ENCODING_CONVERSION_ARGS(PG_LATIN3, PG_MULE_INTERNAL);
Assert(PG_GETARG_INT32(1) == PG_MULE_INTERNAL);
Assert(len >= 0);
latin32mic(src, dest, len); latin32mic(src, dest, len);
...@@ -104,9 +98,7 @@ mic_to_latin3(PG_FUNCTION_ARGS) ...@@ -104,9 +98,7 @@ mic_to_latin3(PG_FUNCTION_ARGS)
unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3); unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
Assert(PG_GETARG_INT32(0) == PG_MULE_INTERNAL); CHECK_ENCODING_CONVERSION_ARGS(PG_MULE_INTERNAL, PG_LATIN3);
Assert(PG_GETARG_INT32(1) == PG_LATIN3);
Assert(len >= 0);
mic2latin3(src, dest, len); mic2latin3(src, dest, len);
...@@ -120,9 +112,7 @@ latin4_to_mic(PG_FUNCTION_ARGS) ...@@ -120,9 +112,7 @@ latin4_to_mic(PG_FUNCTION_ARGS)
unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3); unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
Assert(PG_GETARG_INT32(0) == PG_LATIN4); CHECK_ENCODING_CONVERSION_ARGS(PG_LATIN4, PG_MULE_INTERNAL);
Assert(PG_GETARG_INT32(1) == PG_MULE_INTERNAL);
Assert(len >= 0);
latin42mic(src, dest, len); latin42mic(src, dest, len);
...@@ -136,9 +126,7 @@ mic_to_latin4(PG_FUNCTION_ARGS) ...@@ -136,9 +126,7 @@ mic_to_latin4(PG_FUNCTION_ARGS)
unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3); unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
Assert(PG_GETARG_INT32(0) == PG_MULE_INTERNAL); CHECK_ENCODING_CONVERSION_ARGS(PG_MULE_INTERNAL, PG_LATIN4);
Assert(PG_GETARG_INT32(1) == PG_LATIN4);
Assert(len >= 0);
mic2latin4(src, dest, len); mic2latin4(src, dest, len);
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_ascii/utf8_and_ascii.c,v 1.17 2009/01/01 17:23:52 momjian Exp $ * $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_ascii/utf8_and_ascii.c,v 1.18 2009/01/29 19:23:39 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -41,9 +41,7 @@ ascii_to_utf8(PG_FUNCTION_ARGS) ...@@ -41,9 +41,7 @@ ascii_to_utf8(PG_FUNCTION_ARGS)
unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3); unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
Assert(PG_GETARG_INT32(0) == PG_SQL_ASCII); CHECK_ENCODING_CONVERSION_ARGS(PG_SQL_ASCII, PG_UTF8);
Assert(PG_GETARG_INT32(1) == PG_UTF8);
Assert(len >= 0);
/* this looks wrong, but basically we're just rejecting high-bit-set */ /* this looks wrong, but basically we're just rejecting high-bit-set */
pg_ascii2mic(src, dest, len); pg_ascii2mic(src, dest, len);
...@@ -58,9 +56,7 @@ utf8_to_ascii(PG_FUNCTION_ARGS) ...@@ -58,9 +56,7 @@ utf8_to_ascii(PG_FUNCTION_ARGS)
unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3); unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
Assert(PG_GETARG_INT32(0) == PG_UTF8); CHECK_ENCODING_CONVERSION_ARGS(PG_UTF8, PG_SQL_ASCII);
Assert(PG_GETARG_INT32(1) == PG_SQL_ASCII);
Assert(len >= 0);
/* this looks wrong, but basically we're just rejecting high-bit-set */ /* this looks wrong, but basically we're just rejecting high-bit-set */
pg_mic2ascii(src, dest, len); pg_mic2ascii(src, dest, len);
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_big5/utf8_and_big5.c,v 1.19 2009/01/01 17:23:52 momjian Exp $ * $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_big5/utf8_and_big5.c,v 1.20 2009/01/29 19:23:39 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -42,9 +42,7 @@ big5_to_utf8(PG_FUNCTION_ARGS) ...@@ -42,9 +42,7 @@ big5_to_utf8(PG_FUNCTION_ARGS)
unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3); unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
Assert(PG_GETARG_INT32(0) == PG_BIG5); CHECK_ENCODING_CONVERSION_ARGS(PG_BIG5, PG_UTF8);
Assert(PG_GETARG_INT32(1) == PG_UTF8);
Assert(len >= 0);
LocalToUtf(src, dest, LUmapBIG5, NULL, LocalToUtf(src, dest, LUmapBIG5, NULL,
sizeof(LUmapBIG5) / sizeof(pg_local_to_utf), 0, PG_BIG5, len); sizeof(LUmapBIG5) / sizeof(pg_local_to_utf), 0, PG_BIG5, len);
...@@ -59,9 +57,7 @@ utf8_to_big5(PG_FUNCTION_ARGS) ...@@ -59,9 +57,7 @@ utf8_to_big5(PG_FUNCTION_ARGS)
unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3); unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
Assert(PG_GETARG_INT32(0) == PG_UTF8); CHECK_ENCODING_CONVERSION_ARGS(PG_UTF8, PG_BIG5);
Assert(PG_GETARG_INT32(1) == PG_BIG5);
Assert(len >= 0);
UtfToLocal(src, dest, ULmapBIG5, NULL, UtfToLocal(src, dest, ULmapBIG5, NULL,
sizeof(ULmapBIG5) / sizeof(pg_utf_to_local), 0, PG_BIG5, len); sizeof(ULmapBIG5) / sizeof(pg_utf_to_local), 0, PG_BIG5, len);
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_cyrillic/utf8_and_cyrillic.c,v 1.22 2009/01/01 17:23:52 momjian Exp $ * $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_cyrillic/utf8_and_cyrillic.c,v 1.23 2009/01/29 19:23:40 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -43,9 +43,7 @@ utf8_to_koi8r(PG_FUNCTION_ARGS) ...@@ -43,9 +43,7 @@ utf8_to_koi8r(PG_FUNCTION_ARGS)
unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3); unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
Assert(PG_GETARG_INT32(0) == PG_UTF8); CHECK_ENCODING_CONVERSION_ARGS(PG_UTF8, PG_KOI8R);
Assert(PG_GETARG_INT32(1) == PG_KOI8R);
Assert(len >= 0);
UtfToLocal(src, dest, ULmapKOI8R, NULL, UtfToLocal(src, dest, ULmapKOI8R, NULL,
sizeof(ULmapKOI8R) / sizeof(pg_utf_to_local), 0, PG_KOI8R, len); sizeof(ULmapKOI8R) / sizeof(pg_utf_to_local), 0, PG_KOI8R, len);
...@@ -60,9 +58,7 @@ koi8r_to_utf8(PG_FUNCTION_ARGS) ...@@ -60,9 +58,7 @@ koi8r_to_utf8(PG_FUNCTION_ARGS)
unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3); unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
Assert(PG_GETARG_INT32(0) == PG_KOI8R); CHECK_ENCODING_CONVERSION_ARGS(PG_KOI8R, PG_UTF8);
Assert(PG_GETARG_INT32(1) == PG_UTF8);
Assert(len >= 0);
LocalToUtf(src, dest, LUmapKOI8R, NULL, LocalToUtf(src, dest, LUmapKOI8R, NULL,
sizeof(LUmapKOI8R) / sizeof(pg_local_to_utf), 0, PG_KOI8R, len); sizeof(LUmapKOI8R) / sizeof(pg_local_to_utf), 0, PG_KOI8R, len);
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_euc_cn/utf8_and_euc_cn.c,v 1.20 2009/01/01 17:23:52 momjian Exp $ * $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_euc_cn/utf8_and_euc_cn.c,v 1.21 2009/01/29 19:23:40 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -42,9 +42,7 @@ euc_cn_to_utf8(PG_FUNCTION_ARGS) ...@@ -42,9 +42,7 @@ euc_cn_to_utf8(PG_FUNCTION_ARGS)
unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3); unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
Assert(PG_GETARG_INT32(0) == PG_EUC_CN); CHECK_ENCODING_CONVERSION_ARGS(PG_EUC_CN, PG_UTF8);
Assert(PG_GETARG_INT32(1) == PG_UTF8);
Assert(len >= 0);
LocalToUtf(src, dest, LUmapEUC_CN, NULL, LocalToUtf(src, dest, LUmapEUC_CN, NULL,
sizeof(LUmapEUC_CN) / sizeof(pg_local_to_utf), 0, PG_EUC_CN, len); sizeof(LUmapEUC_CN) / sizeof(pg_local_to_utf), 0, PG_EUC_CN, len);
...@@ -59,9 +57,7 @@ utf8_to_euc_cn(PG_FUNCTION_ARGS) ...@@ -59,9 +57,7 @@ utf8_to_euc_cn(PG_FUNCTION_ARGS)
unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3); unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
Assert(PG_GETARG_INT32(0) == PG_UTF8); CHECK_ENCODING_CONVERSION_ARGS(PG_UTF8, PG_EUC_CN);
Assert(PG_GETARG_INT32(1) == PG_EUC_CN);
Assert(len >= 0);
UtfToLocal(src, dest, ULmapEUC_CN, NULL, UtfToLocal(src, dest, ULmapEUC_CN, NULL,
sizeof(ULmapEUC_CN) / sizeof(pg_utf_to_local), 0, PG_EUC_CN, len); sizeof(ULmapEUC_CN) / sizeof(pg_utf_to_local), 0, PG_EUC_CN, len);
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_euc_jis_2004/utf8_and_euc_jis_2004.c,v 1.4 2009/01/01 17:23:52 momjian Exp $ * $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_euc_jis_2004/utf8_and_euc_jis_2004.c,v 1.5 2009/01/29 19:23:40 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -44,9 +44,7 @@ euc_jis_2004_to_utf8(PG_FUNCTION_ARGS) ...@@ -44,9 +44,7 @@ euc_jis_2004_to_utf8(PG_FUNCTION_ARGS)
unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3); unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
Assert(PG_GETARG_INT32(0) == PG_EUC_JIS_2004); CHECK_ENCODING_CONVERSION_ARGS(PG_EUC_JIS_2004, PG_UTF8);
Assert(PG_GETARG_INT32(1) == PG_UTF8);
Assert(len >= 0);
LocalToUtf(src, dest, LUmapEUC_JIS_2004, LUmapEUC_JIS_2004_combined, LocalToUtf(src, dest, LUmapEUC_JIS_2004, LUmapEUC_JIS_2004_combined,
sizeof(LUmapEUC_JIS_2004) / sizeof(pg_local_to_utf), sizeof(LUmapEUC_JIS_2004) / sizeof(pg_local_to_utf),
...@@ -63,9 +61,7 @@ utf8_to_euc_jis_2004(PG_FUNCTION_ARGS) ...@@ -63,9 +61,7 @@ utf8_to_euc_jis_2004(PG_FUNCTION_ARGS)
unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3); unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
Assert(PG_GETARG_INT32(0) == PG_UTF8); CHECK_ENCODING_CONVERSION_ARGS(PG_UTF8, PG_EUC_JIS_2004);
Assert(PG_GETARG_INT32(1) == PG_EUC_JIS_2004);
Assert(len >= 0);
UtfToLocal(src, dest, ULmapEUC_JIS_2004, ULmapEUC_JIS_2004_combined, UtfToLocal(src, dest, ULmapEUC_JIS_2004, ULmapEUC_JIS_2004_combined,
sizeof(ULmapEUC_JIS_2004) / sizeof(pg_utf_to_local), sizeof(ULmapEUC_JIS_2004) / sizeof(pg_utf_to_local),
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_euc_jp/utf8_and_euc_jp.c,v 1.20 2009/01/01 17:23:52 momjian Exp $ * $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_euc_jp/utf8_and_euc_jp.c,v 1.21 2009/01/29 19:23:40 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -42,9 +42,7 @@ euc_jp_to_utf8(PG_FUNCTION_ARGS) ...@@ -42,9 +42,7 @@ euc_jp_to_utf8(PG_FUNCTION_ARGS)
unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3); unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
Assert(PG_GETARG_INT32(0) == PG_EUC_JP); CHECK_ENCODING_CONVERSION_ARGS(PG_EUC_JP, PG_UTF8);
Assert(PG_GETARG_INT32(1) == PG_UTF8);
Assert(len >= 0);
LocalToUtf(src, dest, LUmapEUC_JP, NULL, LocalToUtf(src, dest, LUmapEUC_JP, NULL,
sizeof(LUmapEUC_JP) / sizeof(pg_local_to_utf), 0, PG_EUC_JP, len); sizeof(LUmapEUC_JP) / sizeof(pg_local_to_utf), 0, PG_EUC_JP, len);
...@@ -59,9 +57,7 @@ utf8_to_euc_jp(PG_FUNCTION_ARGS) ...@@ -59,9 +57,7 @@ utf8_to_euc_jp(PG_FUNCTION_ARGS)
unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3); unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
Assert(PG_GETARG_INT32(0) == PG_UTF8); CHECK_ENCODING_CONVERSION_ARGS(PG_UTF8, PG_EUC_JP);
Assert(PG_GETARG_INT32(1) == PG_EUC_JP);
Assert(len >= 0);
UtfToLocal(src, dest, ULmapEUC_JP, NULL, UtfToLocal(src, dest, ULmapEUC_JP, NULL,
sizeof(ULmapEUC_JP) / sizeof(pg_utf_to_local), 0, PG_EUC_JP, len); sizeof(ULmapEUC_JP) / sizeof(pg_utf_to_local), 0, PG_EUC_JP, len);
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_euc_kr/utf8_and_euc_kr.c,v 1.20 2009/01/01 17:23:52 momjian Exp $ * $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_euc_kr/utf8_and_euc_kr.c,v 1.21 2009/01/29 19:23:40 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -42,9 +42,7 @@ euc_kr_to_utf8(PG_FUNCTION_ARGS) ...@@ -42,9 +42,7 @@ euc_kr_to_utf8(PG_FUNCTION_ARGS)
unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3); unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
Assert(PG_GETARG_INT32(0) == PG_EUC_KR); CHECK_ENCODING_CONVERSION_ARGS(PG_EUC_KR, PG_UTF8);
Assert(PG_GETARG_INT32(1) == PG_UTF8);
Assert(len >= 0);
LocalToUtf(src, dest, LUmapEUC_KR, NULL, LocalToUtf(src, dest, LUmapEUC_KR, NULL,
sizeof(LUmapEUC_KR) / sizeof(pg_local_to_utf), 0, PG_EUC_KR, len); sizeof(LUmapEUC_KR) / sizeof(pg_local_to_utf), 0, PG_EUC_KR, len);
...@@ -59,9 +57,7 @@ utf8_to_euc_kr(PG_FUNCTION_ARGS) ...@@ -59,9 +57,7 @@ utf8_to_euc_kr(PG_FUNCTION_ARGS)
unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3); unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
Assert(PG_GETARG_INT32(0) == PG_UTF8); CHECK_ENCODING_CONVERSION_ARGS(PG_UTF8, PG_EUC_KR);
Assert(PG_GETARG_INT32(1) == PG_EUC_KR);
Assert(len >= 0);
UtfToLocal(src, dest, ULmapEUC_KR, NULL, UtfToLocal(src, dest, ULmapEUC_KR, NULL,
sizeof(ULmapEUC_KR) / sizeof(pg_utf_to_local), 0, PG_EUC_KR, len); sizeof(ULmapEUC_KR) / sizeof(pg_utf_to_local), 0, PG_EUC_KR, len);
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_euc_tw/utf8_and_euc_tw.c,v 1.20 2009/01/01 17:23:52 momjian Exp $ * $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_euc_tw/utf8_and_euc_tw.c,v 1.21 2009/01/29 19:23:40 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -42,9 +42,7 @@ euc_tw_to_utf8(PG_FUNCTION_ARGS) ...@@ -42,9 +42,7 @@ euc_tw_to_utf8(PG_FUNCTION_ARGS)
unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3); unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
Assert(PG_GETARG_INT32(0) == PG_EUC_TW); CHECK_ENCODING_CONVERSION_ARGS(PG_EUC_TW, PG_UTF8);
Assert(PG_GETARG_INT32(1) == PG_UTF8);
Assert(len >= 0);
LocalToUtf(src, dest, LUmapEUC_TW, NULL, LocalToUtf(src, dest, LUmapEUC_TW, NULL,
sizeof(LUmapEUC_TW) / sizeof(pg_local_to_utf), 0, PG_EUC_TW, len); sizeof(LUmapEUC_TW) / sizeof(pg_local_to_utf), 0, PG_EUC_TW, len);
...@@ -59,9 +57,7 @@ utf8_to_euc_tw(PG_FUNCTION_ARGS) ...@@ -59,9 +57,7 @@ utf8_to_euc_tw(PG_FUNCTION_ARGS)
unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3); unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
Assert(PG_GETARG_INT32(0) == PG_UTF8); CHECK_ENCODING_CONVERSION_ARGS(PG_UTF8, PG_EUC_TW);
Assert(PG_GETARG_INT32(1) == PG_EUC_TW);
Assert(len >= 0);
UtfToLocal(src, dest, ULmapEUC_TW, NULL, UtfToLocal(src, dest, ULmapEUC_TW, NULL,
sizeof(ULmapEUC_TW) / sizeof(pg_utf_to_local), 0, PG_EUC_TW, len); sizeof(ULmapEUC_TW) / sizeof(pg_utf_to_local), 0, PG_EUC_TW, len);
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_gb18030/utf8_and_gb18030.c,v 1.21 2009/01/01 17:23:52 momjian Exp $ * $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_gb18030/utf8_and_gb18030.c,v 1.22 2009/01/29 19:23:40 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -42,9 +42,7 @@ gb18030_to_utf8(PG_FUNCTION_ARGS) ...@@ -42,9 +42,7 @@ gb18030_to_utf8(PG_FUNCTION_ARGS)
unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3); unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
Assert(PG_GETARG_INT32(0) == PG_GB18030); CHECK_ENCODING_CONVERSION_ARGS(PG_GB18030, PG_UTF8);
Assert(PG_GETARG_INT32(1) == PG_UTF8);
Assert(len >= 0);
LocalToUtf(src, dest, LUmapGB18030, NULL, LocalToUtf(src, dest, LUmapGB18030, NULL,
sizeof(LUmapGB18030) / sizeof(pg_local_to_utf), 0, PG_GB18030, len); sizeof(LUmapGB18030) / sizeof(pg_local_to_utf), 0, PG_GB18030, len);
...@@ -59,9 +57,7 @@ utf8_to_gb18030(PG_FUNCTION_ARGS) ...@@ -59,9 +57,7 @@ utf8_to_gb18030(PG_FUNCTION_ARGS)
unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3); unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
Assert(PG_GETARG_INT32(0) == PG_UTF8); CHECK_ENCODING_CONVERSION_ARGS(PG_UTF8, PG_GB18030);
Assert(PG_GETARG_INT32(1) == PG_GB18030);
Assert(len >= 0);
UtfToLocal(src, dest, ULmapGB18030, NULL, UtfToLocal(src, dest, ULmapGB18030, NULL,
sizeof(ULmapGB18030) / sizeof(pg_utf_to_local), 0, PG_GB18030, len); sizeof(ULmapGB18030) / sizeof(pg_utf_to_local), 0, PG_GB18030, len);
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_gbk/utf8_and_gbk.c,v 1.18 2009/01/01 17:23:52 momjian Exp $ * $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_gbk/utf8_and_gbk.c,v 1.19 2009/01/29 19:23:41 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -42,9 +42,7 @@ gbk_to_utf8(PG_FUNCTION_ARGS) ...@@ -42,9 +42,7 @@ gbk_to_utf8(PG_FUNCTION_ARGS)
unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3); unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
Assert(PG_GETARG_INT32(0) == PG_GBK); CHECK_ENCODING_CONVERSION_ARGS(PG_GBK, PG_UTF8);
Assert(PG_GETARG_INT32(1) == PG_UTF8);
Assert(len >= 0);
LocalToUtf(src, dest, LUmapGBK, NULL, LocalToUtf(src, dest, LUmapGBK, NULL,
sizeof(LUmapGBK) / sizeof(pg_local_to_utf), 0, PG_GBK, len); sizeof(LUmapGBK) / sizeof(pg_local_to_utf), 0, PG_GBK, len);
...@@ -59,9 +57,7 @@ utf8_to_gbk(PG_FUNCTION_ARGS) ...@@ -59,9 +57,7 @@ utf8_to_gbk(PG_FUNCTION_ARGS)
unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3); unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
Assert(PG_GETARG_INT32(0) == PG_UTF8); CHECK_ENCODING_CONVERSION_ARGS(PG_UTF8, PG_GBK);
Assert(PG_GETARG_INT32(1) == PG_GBK);
Assert(len >= 0);
UtfToLocal(src, dest, ULmapGBK, NULL, UtfToLocal(src, dest, ULmapGBK, NULL,
sizeof(ULmapGBK) / sizeof(pg_utf_to_local), 0, PG_GBK, len); sizeof(ULmapGBK) / sizeof(pg_utf_to_local), 0, PG_GBK, len);
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_iso8859/utf8_and_iso8859.c,v 1.29 2009/01/01 17:23:52 momjian Exp $ * $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_iso8859/utf8_and_iso8859.c,v 1.30 2009/01/29 19:23:42 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -120,8 +120,7 @@ iso8859_to_utf8(PG_FUNCTION_ARGS) ...@@ -120,8 +120,7 @@ iso8859_to_utf8(PG_FUNCTION_ARGS)
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
int i; int i;
Assert(PG_GETARG_INT32(1) == PG_UTF8); CHECK_ENCODING_CONVERSION_ARGS(-1, PG_UTF8);
Assert(len >= 0);
for (i = 0; i < sizeof(maps) / sizeof(pg_conv_map); i++) for (i = 0; i < sizeof(maps) / sizeof(pg_conv_map); i++)
{ {
...@@ -148,8 +147,7 @@ utf8_to_iso8859(PG_FUNCTION_ARGS) ...@@ -148,8 +147,7 @@ utf8_to_iso8859(PG_FUNCTION_ARGS)
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
int i; int i;
Assert(PG_GETARG_INT32(0) == PG_UTF8); CHECK_ENCODING_CONVERSION_ARGS(PG_UTF8, -1);
Assert(len >= 0);
for (i = 0; i < sizeof(maps) / sizeof(pg_conv_map); i++) for (i = 0; i < sizeof(maps) / sizeof(pg_conv_map); i++)
{ {
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_iso8859_1/utf8_and_iso8859_1.c,v 1.21 2009/01/01 17:23:52 momjian Exp $ * $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_iso8859_1/utf8_and_iso8859_1.c,v 1.22 2009/01/29 19:23:42 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -42,9 +42,7 @@ iso8859_1_to_utf8(PG_FUNCTION_ARGS) ...@@ -42,9 +42,7 @@ iso8859_1_to_utf8(PG_FUNCTION_ARGS)
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
unsigned short c; unsigned short c;
Assert(PG_GETARG_INT32(0) == PG_LATIN1); CHECK_ENCODING_CONVERSION_ARGS(PG_LATIN1, PG_UTF8);
Assert(PG_GETARG_INT32(1) == PG_UTF8);
Assert(len >= 0);
while (len > 0) while (len > 0)
{ {
...@@ -75,9 +73,7 @@ utf8_to_iso8859_1(PG_FUNCTION_ARGS) ...@@ -75,9 +73,7 @@ utf8_to_iso8859_1(PG_FUNCTION_ARGS)
unsigned short c, unsigned short c,
c1; c1;
Assert(PG_GETARG_INT32(0) == PG_UTF8); CHECK_ENCODING_CONVERSION_ARGS(PG_UTF8, PG_LATIN1);
Assert(PG_GETARG_INT32(1) == PG_LATIN1);
Assert(len >= 0);
while (len > 0) while (len > 0)
{ {
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_johab/utf8_and_johab.c,v 1.20 2009/01/01 17:23:52 momjian Exp $ * $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_johab/utf8_and_johab.c,v 1.21 2009/01/29 19:23:42 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -42,9 +42,7 @@ johab_to_utf8(PG_FUNCTION_ARGS) ...@@ -42,9 +42,7 @@ johab_to_utf8(PG_FUNCTION_ARGS)
unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3); unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
Assert(PG_GETARG_INT32(0) == PG_JOHAB); CHECK_ENCODING_CONVERSION_ARGS(PG_JOHAB, PG_UTF8);
Assert(PG_GETARG_INT32(1) == PG_UTF8);
Assert(len >= 0);
LocalToUtf(src, dest, LUmapJOHAB, NULL, LocalToUtf(src, dest, LUmapJOHAB, NULL,
sizeof(LUmapJOHAB) / sizeof(pg_local_to_utf), 0, PG_JOHAB, len); sizeof(LUmapJOHAB) / sizeof(pg_local_to_utf), 0, PG_JOHAB, len);
...@@ -59,9 +57,7 @@ utf8_to_johab(PG_FUNCTION_ARGS) ...@@ -59,9 +57,7 @@ utf8_to_johab(PG_FUNCTION_ARGS)
unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3); unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
Assert(PG_GETARG_INT32(0) == PG_UTF8); CHECK_ENCODING_CONVERSION_ARGS(PG_UTF8, PG_JOHAB);
Assert(PG_GETARG_INT32(1) == PG_JOHAB);
Assert(len >= 0);
UtfToLocal(src, dest, ULmapJOHAB, NULL, UtfToLocal(src, dest, ULmapJOHAB, NULL,
sizeof(ULmapJOHAB) / sizeof(pg_utf_to_local), 0, PG_JOHAB, len); sizeof(ULmapJOHAB) / sizeof(pg_utf_to_local), 0, PG_JOHAB, len);
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_shift_jis_2004/utf8_and_shift_jis_2004.c,v 1.4 2009/01/01 17:23:52 momjian Exp $ * $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_shift_jis_2004/utf8_and_shift_jis_2004.c,v 1.5 2009/01/29 19:23:42 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -44,9 +44,7 @@ shift_jis_2004_to_utf8(PG_FUNCTION_ARGS) ...@@ -44,9 +44,7 @@ shift_jis_2004_to_utf8(PG_FUNCTION_ARGS)
unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3); unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
Assert(PG_GETARG_INT32(0) == PG_SHIFT_JIS_2004); CHECK_ENCODING_CONVERSION_ARGS(PG_SHIFT_JIS_2004, PG_UTF8);
Assert(PG_GETARG_INT32(1) == PG_UTF8);
Assert(len >= 0);
LocalToUtf(src, dest, LUmapSHIFT_JIS_2004, LUmapSHIFT_JIS_2004_combined, LocalToUtf(src, dest, LUmapSHIFT_JIS_2004, LUmapSHIFT_JIS_2004_combined,
sizeof(LUmapSHIFT_JIS_2004) / sizeof(pg_local_to_utf), sizeof(LUmapSHIFT_JIS_2004) / sizeof(pg_local_to_utf),
...@@ -63,9 +61,7 @@ utf8_to_shift_jis_2004(PG_FUNCTION_ARGS) ...@@ -63,9 +61,7 @@ utf8_to_shift_jis_2004(PG_FUNCTION_ARGS)
unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3); unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
Assert(PG_GETARG_INT32(0) == PG_UTF8); CHECK_ENCODING_CONVERSION_ARGS(PG_UTF8, PG_SHIFT_JIS_2004);
Assert(PG_GETARG_INT32(1) == PG_SHIFT_JIS_2004);
Assert(len >= 0);
UtfToLocal(src, dest, ULmapSHIFT_JIS_2004, ULmapSHIFT_JIS_2004_combined, UtfToLocal(src, dest, ULmapSHIFT_JIS_2004, ULmapSHIFT_JIS_2004_combined,
sizeof(ULmapSHIFT_JIS_2004) / sizeof(pg_utf_to_local), sizeof(ULmapSHIFT_JIS_2004) / sizeof(pg_utf_to_local),
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_sjis/utf8_and_sjis.c,v 1.18 2009/01/01 17:23:52 momjian Exp $ * $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_sjis/utf8_and_sjis.c,v 1.19 2009/01/29 19:23:42 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -42,9 +42,7 @@ sjis_to_utf8(PG_FUNCTION_ARGS) ...@@ -42,9 +42,7 @@ sjis_to_utf8(PG_FUNCTION_ARGS)
unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3); unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
Assert(PG_GETARG_INT32(0) == PG_SJIS); CHECK_ENCODING_CONVERSION_ARGS(PG_SJIS, PG_UTF8);
Assert(PG_GETARG_INT32(1) == PG_UTF8);
Assert(len >= 0);
LocalToUtf(src, dest, LUmapSJIS, NULL, LocalToUtf(src, dest, LUmapSJIS, NULL,
sizeof(LUmapSJIS) / sizeof(pg_local_to_utf), 0, PG_SJIS, len); sizeof(LUmapSJIS) / sizeof(pg_local_to_utf), 0, PG_SJIS, len);
...@@ -59,9 +57,7 @@ utf8_to_sjis(PG_FUNCTION_ARGS) ...@@ -59,9 +57,7 @@ utf8_to_sjis(PG_FUNCTION_ARGS)
unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3); unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
Assert(PG_GETARG_INT32(0) == PG_UTF8); CHECK_ENCODING_CONVERSION_ARGS(PG_UTF8, PG_SJIS);
Assert(PG_GETARG_INT32(1) == PG_SJIS);
Assert(len >= 0);
UtfToLocal(src, dest, ULmapSJIS, NULL, UtfToLocal(src, dest, ULmapSJIS, NULL,
sizeof(ULmapSJIS) / sizeof(pg_utf_to_local), 0, PG_SJIS, len); sizeof(ULmapSJIS) / sizeof(pg_utf_to_local), 0, PG_SJIS, len);
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_uhc/utf8_and_uhc.c,v 1.18 2009/01/01 17:23:52 momjian Exp $ * $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_uhc/utf8_and_uhc.c,v 1.19 2009/01/29 19:23:42 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -42,9 +42,7 @@ uhc_to_utf8(PG_FUNCTION_ARGS) ...@@ -42,9 +42,7 @@ uhc_to_utf8(PG_FUNCTION_ARGS)
unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3); unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
Assert(PG_GETARG_INT32(0) == PG_UHC); CHECK_ENCODING_CONVERSION_ARGS(PG_UHC, PG_UTF8);
Assert(PG_GETARG_INT32(1) == PG_UTF8);
Assert(len >= 0);
LocalToUtf(src, dest, LUmapUHC, NULL, LocalToUtf(src, dest, LUmapUHC, NULL,
sizeof(LUmapUHC) / sizeof(pg_local_to_utf), 0, PG_UHC, len); sizeof(LUmapUHC) / sizeof(pg_local_to_utf), 0, PG_UHC, len);
...@@ -59,9 +57,7 @@ utf8_to_uhc(PG_FUNCTION_ARGS) ...@@ -59,9 +57,7 @@ utf8_to_uhc(PG_FUNCTION_ARGS)
unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3); unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
Assert(PG_GETARG_INT32(0) == PG_UTF8); CHECK_ENCODING_CONVERSION_ARGS(PG_UTF8, PG_UHC);
Assert(PG_GETARG_INT32(1) == PG_UHC);
Assert(len >= 0);
UtfToLocal(src, dest, ULmapUHC, NULL, UtfToLocal(src, dest, ULmapUHC, NULL,
sizeof(ULmapUHC) / sizeof(pg_utf_to_local), 0, PG_UHC, len); sizeof(ULmapUHC) / sizeof(pg_utf_to_local), 0, PG_UHC, len);
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_win/utf8_and_win.c,v 1.13 2009/01/01 17:23:53 momjian Exp $ * $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_win/utf8_and_win.c,v 1.14 2009/01/29 19:23:42 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -110,8 +110,7 @@ win_to_utf8(PG_FUNCTION_ARGS) ...@@ -110,8 +110,7 @@ win_to_utf8(PG_FUNCTION_ARGS)
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
int i; int i;
Assert(PG_GETARG_INT32(1) == PG_UTF8); CHECK_ENCODING_CONVERSION_ARGS(-1, PG_UTF8);
Assert(len >= 0);
for (i = 0; i < sizeof(maps) / sizeof(pg_conv_map); i++) for (i = 0; i < sizeof(maps) / sizeof(pg_conv_map); i++)
{ {
...@@ -138,8 +137,7 @@ utf8_to_win(PG_FUNCTION_ARGS) ...@@ -138,8 +137,7 @@ utf8_to_win(PG_FUNCTION_ARGS)
int len = PG_GETARG_INT32(4); int len = PG_GETARG_INT32(4);
int i; int i;
Assert(PG_GETARG_INT32(0) == PG_UTF8); CHECK_ENCODING_CONVERSION_ARGS(PG_UTF8, -1);
Assert(len >= 0);
for (i = 0; i < sizeof(maps) / sizeof(pg_conv_map); i++) for (i = 0; i < sizeof(maps) / sizeof(pg_conv_map); i++)
{ {
......
/* /*
* conversion functions between pg_wchar and multibyte streams. * conversion functions between pg_wchar and multibyte streams.
* Tatsuo Ishii * Tatsuo Ishii
* $PostgreSQL: pgsql/src/backend/utils/mb/wchar.c,v 1.68 2008/10/29 08:04:53 petere Exp $ * $PostgreSQL: pgsql/src/backend/utils/mb/wchar.c,v 1.69 2009/01/29 19:23:42 tgl Exp $
* *
*/ */
/* can be used in either frontend or backend */ /* can be used in either frontend or backend */
...@@ -1549,6 +1549,39 @@ pg_verify_mbstr_len(int encoding, const char *mbstr, int len, bool noError) ...@@ -1549,6 +1549,39 @@ pg_verify_mbstr_len(int encoding, const char *mbstr, int len, bool noError)
return mb_len; return mb_len;
} }
/*
* 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 * report_invalid_encoding: complain about invalid multibyte character
* *
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group * Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* $PostgreSQL: pgsql/src/include/mb/pg_wchar.h,v 1.82 2009/01/04 18:37:36 tgl Exp $ * $PostgreSQL: pgsql/src/include/mb/pg_wchar.h,v 1.83 2009/01/29 19:23:42 tgl Exp $
* *
* NOTES * NOTES
* This is used both by the backend and by libpq, but should not be * This is used both by the backend and by libpq, but should not be
...@@ -325,6 +325,19 @@ typedef struct ...@@ -325,6 +325,19 @@ typedef struct
uint32 utf2; /* UTF-8 code 2 */ uint32 utf2; /* UTF-8 code 2 */
} pg_local_to_utf_combined; } pg_local_to_utf_combined;
/*
* 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))
/* /*
* These functions are considered part of libpq's exported API and * These functions are considered part of libpq's exported API and
...@@ -408,6 +421,12 @@ extern bool pg_verify_mbstr(int encoding, const char *mbstr, int len, ...@@ -408,6 +421,12 @@ extern bool pg_verify_mbstr(int encoding, const char *mbstr, int len,
extern int pg_verify_mbstr_len(int encoding, const char *mbstr, int len, extern int pg_verify_mbstr_len(int encoding, const char *mbstr, int len,
bool noError); 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_invalid_encoding(int encoding, const char *mbstr, int len);
extern void report_untranslatable_char(int src_encoding, int dest_encoding, extern void report_untranslatable_char(int src_encoding, int dest_encoding,
const char *mbstr, int len); const char *mbstr, int len);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment