From 7e99cea816bde08ba3bda2de4e972adc624a659e Mon Sep 17 00:00:00 2001
From: Tatsuo Ishii <ishii@postgresql.org>
Date: Tue, 11 Sep 2001 05:18:59 +0000
Subject: [PATCH] Implement following item in TODO:

* Reject character sequences those are not valid in their charset
---
 src/backend/utils/adt/varchar.c | 13 ++++++++++++-
 src/backend/utils/adt/varlena.c | 11 ++++++++++-
 2 files changed, 22 insertions(+), 2 deletions(-)

diff --git a/src/backend/utils/adt/varchar.c b/src/backend/utils/adt/varchar.c
index 38b26173ad2..b142d126c1c 100644
--- a/src/backend/utils/adt/varchar.c
+++ b/src/backend/utils/adt/varchar.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/utils/adt/varchar.c,v 1.81 2001/07/15 11:07:37 ishii Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/utils/adt/varchar.c,v 1.82 2001/09/11 05:18:59 ishii Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -75,10 +75,14 @@ bpcharin(PG_FUNCTION_ARGS)
 	int			i;
 #ifdef MULTIBYTE
 	int	charlen;	/* number of charcters in the input string */
+	char	*ermsg;
 #endif
 
 	len = strlen(s);
 #ifdef MULTIBYTE
+	if ((ermsg = pg_verifymbstr(s, len)))
+	    elog(ERROR,"%s",ermsg);
+
 	charlen = pg_mbstrlen(s);
 #endif
 
@@ -405,8 +409,15 @@ varcharin(PG_FUNCTION_ARGS)
 	int32		atttypmod = PG_GETARG_INT32(2);
 	VarChar    *result;
 	size_t		len, maxlen;
+#ifdef MULTIBYTE
+	char	*ermsg;
+#endif
 
 	len = strlen(s);
+#ifdef MULTIBYTE
+	if ((ermsg = pg_verifymbstr(s, len)))
+	    elog(ERROR,"%s",ermsg);
+#endif
 	maxlen = atttypmod - VARHDRSZ;
 
 	if (atttypmod >= (int32) VARHDRSZ && len > maxlen)
diff --git a/src/backend/utils/adt/varlena.c b/src/backend/utils/adt/varlena.c
index 9bc42cf05e7..75eee05eeae 100644
--- a/src/backend/utils/adt/varlena.c
+++ b/src/backend/utils/adt/varlena.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/utils/adt/varlena.c,v 1.71 2001/08/13 18:45:35 tgl Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/utils/adt/varlena.c,v 1.72 2001/09/11 05:18:59 ishii Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -154,8 +154,17 @@ textin(PG_FUNCTION_ARGS)
 	char	   *inputText = PG_GETARG_CSTRING(0);
 	text	   *result;
 	int			len;
+#ifdef MULTIBYTE
+	char	*ermsg;
+#endif
 
 	len = strlen(inputText) + VARHDRSZ;
+
+#ifdef MULTIBYTE
+	if ((ermsg = pg_verifymbstr(inputText, len - VARHDRSZ)))
+	    elog(ERROR,"%s",ermsg);
+#endif
+
 	result = (text *) palloc(len);
 	VARATT_SIZEP(result) = len;
 
-- 
GitLab