diff options
| author | Tom Lane | 2009-01-29 19:24:19 +0000 |
|---|---|---|
| committer | Tom Lane | 2009-01-29 19:24:19 +0000 |
| commit | 31fb149a091324fcdb0eada87018cf3e43f812d3 (patch) | |
| tree | 3f739b274e6ebe473d12614d45d2ebc7224ce23b /src/include | |
| parent | 3364386166f4d7b926d12d7b51645e9c7a3a1c7e (diff) | |
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.
Diffstat (limited to 'src/include')
| -rw-r--r-- | src/include/mb/pg_wchar.h | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/src/include/mb/pg_wchar.h b/src/include/mb/pg_wchar.h index 2d465a1b38b..88304b5f69c 100644 --- a/src/include/mb/pg_wchar.h +++ b/src/include/mb/pg_wchar.h @@ -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); |
