Vince Vielhaber <[EMAIL PROTECTED]> writes:
> And another one.

This patch should fix the problem. Doesn't include my previous patch
for repeat(). Again, somewhat off-the-cuff, so I might have missed
something...

test=# select lpad('xxxxx',1431655765,'yyyyyyyyyyyyyyyy');
ERROR:  Requested length too large
test=# select rpad('xxxxx',1431655765,'yyyyyyyyyyyyyyyy');
ERROR:  Requested length too large

(That's on a Unicode DB, haven't tested other encodings but AFAICT
this fix should still work.)

Cheers,

Neil

-- 
Neil Conway <[EMAIL PROTECTED]> || PGP Key ID: DB3C29FC
Index: src/backend/utils/adt/oracle_compat.c
===================================================================
RCS file: /var/lib/cvs/pgsql-server/src/backend/utils/adt/oracle_compat.c,v
retrieving revision 1.38
diff -c -r1.38 oracle_compat.c
*** src/backend/utils/adt/oracle_compat.c	20 Jun 2002 20:51:45 -0000	1.38
--- src/backend/utils/adt/oracle_compat.c	20 Aug 2002 21:04:07 -0000
***************
*** 199,204 ****
--- 199,209 ----
  
  #ifdef MULTIBYTE
  	bytelen = pg_database_encoding_max_length() * len;
+ 
+ 	/* check for integer overflow */
+ 	if (len != 0 && bytelen / pg_database_encoding_max_length() != len)
+ 		elog(ERROR, "Requested length too large");
+ 
  	ret = (text *) palloc(VARHDRSZ + bytelen);
  #else
  	ret = (text *) palloc(VARHDRSZ + len);
***************
*** 310,315 ****
--- 315,325 ----
  
  #ifdef MULTIBYTE
  	bytelen = pg_database_encoding_max_length() * len;
+ 
+ 	/* Check for integer overflow */
+ 	if (len != 0 && bytelen / pg_database_encoding_max_length() != len)
+ 		elog(ERROR, "Requested length too large");
+ 
  	ret = (text *) palloc(VARHDRSZ + bytelen);
  #else
  	ret = (text *) palloc(VARHDRSZ + len);

---------------------------(end of broadcast)---------------------------
TIP 6: Have you searched our list archives?

http://archives.postgresql.org

Reply via email to