From 649d8543d3880d288a76d5f3343fa37d7cb610a6 Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
Date: Tue, 8 Jan 2002 17:03:41 +0000
Subject: [PATCH] Fix lpad() and rpad() to produce correct results in
 variable-length multibyte encodings.

---
 src/backend/utils/adt/oracle_compat.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/src/backend/utils/adt/oracle_compat.c b/src/backend/utils/adt/oracle_compat.c
index 46a029caaea..d4391f764fc 100644
--- a/src/backend/utils/adt/oracle_compat.c
+++ b/src/backend/utils/adt/oracle_compat.c
@@ -9,7 +9,7 @@
  *
  *
  * IDENTIFICATION
- *	$Header: /cvsroot/pgsql/src/backend/utils/adt/oracle_compat.c,v 1.36 2001/10/25 05:49:45 momjian Exp $
+ *	$Header: /cvsroot/pgsql/src/backend/utils/adt/oracle_compat.c,v 1.37 2002/01/08 17:03:41 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -200,10 +200,8 @@ lpad(PG_FUNCTION_ARGS)
 #ifdef MULTIBYTE
 	bytelen = pg_database_encoding_max_length() * len;
 	ret = (text *) palloc(VARHDRSZ + bytelen);
-	VARATT_SIZEP(ret) = VARHDRSZ + bytelen;
 #else
 	ret = (text *) palloc(VARHDRSZ + len);
-	VARATT_SIZEP(ret) = VARHDRSZ + len;
 #endif
 	m = len - s1len;
 
@@ -247,6 +245,8 @@ lpad(PG_FUNCTION_ARGS)
 		*ptr_ret++ = *ptr1++;
 #endif
 
+	VARATT_SIZEP(ret) = ptr_ret - (char *) ret;
+
 	PG_RETURN_TEXT_P(ret);
 }
 
@@ -311,10 +311,8 @@ rpad(PG_FUNCTION_ARGS)
 #ifdef MULTIBYTE
 	bytelen = pg_database_encoding_max_length() * len;
 	ret = (text *) palloc(VARHDRSZ + bytelen);
-	VARATT_SIZEP(ret) = VARHDRSZ + bytelen;
 #else
 	ret = (text *) palloc(VARHDRSZ + len);
-	VARATT_SIZEP(ret) = VARHDRSZ + len;
 #endif
 	m = len - s1len;
 
@@ -358,6 +356,8 @@ rpad(PG_FUNCTION_ARGS)
 	}
 #endif
 
+	VARATT_SIZEP(ret) = ptr_ret - (char *) ret;
+
 	PG_RETURN_TEXT_P(ret);
 }
 
-- 
GitLab