diff options
Diffstat (limited to 'src/backend/utils/adt')
| -rw-r--r-- | src/backend/utils/adt/ascii.c | 15 | ||||
| -rw-r--r-- | src/backend/utils/adt/xml.c | 30 |
2 files changed, 38 insertions, 7 deletions
diff --git a/src/backend/utils/adt/ascii.c b/src/backend/utils/adt/ascii.c index 3bd449dcc0..ce4bb6f004 100644 --- a/src/backend/utils/adt/ascii.c +++ b/src/backend/utils/adt/ascii.c @@ -5,7 +5,7 @@ * Portions Copyright (c) 1999-2007, PostgreSQL Global Development Group * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/utils/adt/ascii.c,v 1.30 2007/01/05 22:19:40 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/utils/adt/ascii.c,v 1.31 2007/10/13 20:18:41 tgl Exp $ * *----------------------------------------------------------------------- */ @@ -117,7 +117,13 @@ Datum to_ascii_encname(PG_FUNCTION_ARGS) { text *data = PG_GETARG_TEXT_P_COPY(0); - int enc = pg_char_to_encoding(NameStr(*PG_GETARG_NAME(1))); + char *encname = NameStr(*PG_GETARG_NAME(1)); + int enc = pg_char_to_encoding(encname); + + if (enc < 0) + ereport(ERROR, + (errcode(ERRCODE_UNDEFINED_OBJECT), + errmsg("%s is not a valid encoding name", encname))); PG_RETURN_TEXT_P(encode_to_ascii(data, enc)); } @@ -132,6 +138,11 @@ to_ascii_enc(PG_FUNCTION_ARGS) text *data = PG_GETARG_TEXT_P_COPY(0); int enc = PG_GETARG_INT32(1); + if (!PG_VALID_ENCODING(enc)) + ereport(ERROR, + (errcode(ERRCODE_UNDEFINED_OBJECT), + errmsg("%d is not a valid encoding code", enc))); + PG_RETURN_TEXT_P(encode_to_ascii(data, enc)); } diff --git a/src/backend/utils/adt/xml.c b/src/backend/utils/adt/xml.c index 0e656b2288..537340811c 100644 --- a/src/backend/utils/adt/xml.c +++ b/src/backend/utils/adt/xml.c @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2007, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/backend/utils/adt/xml.c,v 1.47 2007/09/23 21:36:42 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/utils/adt/xml.c,v 1.48 2007/10/13 20:18:41 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -127,6 +127,24 @@ XmlOptionType xmloption; #define NAMESPACE_SQLXML "http://standards.iso.org/iso/9075/2003/sqlxml" +#ifdef USE_LIBXML + +static int +xmlChar_to_encoding(xmlChar *encoding_name) +{ + int encoding = pg_char_to_encoding((char *) encoding_name); + + if (encoding < 0) + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("invalid encoding name \"%s\"", + (char *) encoding_name))); + return encoding; +} + +#endif + + Datum xml_in(PG_FUNCTION_ARGS) { @@ -263,7 +281,9 @@ xml_recv(PG_FUNCTION_ARGS) /* Now that we know what we're dealing with, convert to server encoding */ newstr = (char *) pg_do_encoding_conversion((unsigned char *) str, nbytes, - encoding ? pg_char_to_encoding((char *) encoding) : PG_UTF8, + encoding ? + xmlChar_to_encoding(encoding) : + PG_UTF8, GetDatabaseEncoding()); if (newstr != str) @@ -1084,9 +1104,9 @@ xml_parse(text *data, XmlOptionType xmloption_arg, bool preserve_whitespace, xml utf8string = pg_do_encoding_conversion(string, len, - encoding - ? pg_char_to_encoding((char *) encoding) - : GetDatabaseEncoding(), + encoding ? + xmlChar_to_encoding(encoding) : + GetDatabaseEncoding(), PG_UTF8); xml_init(); |
