Cursor support buffer patch

Started by Ian Lance Taylorabout 25 years ago4 messagespatches
Jump to latest
#1Ian Lance Taylor
ian@airs.com

Here is a small patch for the cursor support which Jan recently added.
The code assumed that there would be a '\0' in buf after storing the
characters in new->refname, but it did nothing to ensure that.

I can't convince myself that this code does not have the possibility
of buffer overflow. However, I have not tried to fix that. For that
matter, I see other possibilities for buffer overflow in gram.y, such
as in decl_cursor_arglist. Buffer overflow of this sort is not good,
as it means that anybody who is permitted to create functions can
completely break security.

Ian

Index: gram.y
===================================================================
RCS file: /home/projects/pgsql/cvsroot/pgsql/src/pl/plpgsql/src/gram.y,v
retrieving revision 1.20
diff -u -p -r1.20 gram.y
--- gram.y	2001/05/31 17:15:40	1.20
+++ gram.y	2001/06/06 06:35:46
@@ -385,7 +385,8 @@ decl_statement	: decl_varname decl_const
 								*cp2++ = '\\';
 							*cp2++ = *cp1++;
 						}
-						strcat(buf, "'");
+						*cp2++ = '\'';
+						*cp2 = '\0';
 						curname_def->query = strdup(buf);
 						new->default_val = curname_def;
#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Ian Lance Taylor (#1)
Re: Cursor support buffer patch

Ian Lance Taylor <ian@airs.com> writes:

The code assumed that there would be a '\0' in buf after storing the
characters in new->refname, but it did nothing to ensure that.

Good catch.

I can't convince myself that this code does not have the possibility
of buffer overflow.

It obviously does; the fixed-size buffer should be replaced by a
PLpgSQL_dstring, probably. I don't much like the fixed-size
fieldnames[] buffers elsewhere in that file, either.

regards, tom lane

#3Bruce Momjian
bruce@momjian.us
In reply to: Ian Lance Taylor (#1)
Re: Cursor support buffer patch

Your patch has been added to the PostgreSQL unapplied patches list at:

http://candle.pha.pa.us/cgi-bin/pgpatches

I will try to apply it within the next 48 hours.

Here is a small patch for the cursor support which Jan recently added.
The code assumed that there would be a '\0' in buf after storing the
characters in new->refname, but it did nothing to ensure that.

I can't convince myself that this code does not have the possibility
of buffer overflow. However, I have not tried to fix that. For that
matter, I see other possibilities for buffer overflow in gram.y, such
as in decl_cursor_arglist. Buffer overflow of this sort is not good,
as it means that anybody who is permitted to create functions can
completely break security.

Ian

Index: gram.y
===================================================================
RCS file: /home/projects/pgsql/cvsroot/pgsql/src/pl/plpgsql/src/gram.y,v
retrieving revision 1.20
diff -u -p -r1.20 gram.y
--- gram.y	2001/05/31 17:15:40	1.20
+++ gram.y	2001/06/06 06:35:46
@@ -385,7 +385,8 @@ decl_statement	: decl_varname decl_const
*cp2++ = '\\';
*cp2++ = *cp1++;
}
-						strcat(buf, "'");
+						*cp2++ = '\'';
+						*cp2 = '\0';
curname_def->query = strdup(buf);
new->default_val = curname_def;

---------------------------(end of broadcast)---------------------------
TIP 5: Have you checked our extensive FAQ?

http://www.postgresql.org/users-lounge/docs/faq.html

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026
#4Bruce Momjian
bruce@momjian.us
In reply to: Ian Lance Taylor (#1)
Re: Cursor support buffer patch

I see this was already installed by Jan.

Here is a small patch for the cursor support which Jan recently added.
The code assumed that there would be a '\0' in buf after storing the
characters in new->refname, but it did nothing to ensure that.

I can't convince myself that this code does not have the possibility
of buffer overflow. However, I have not tried to fix that. For that
matter, I see other possibilities for buffer overflow in gram.y, such
as in decl_cursor_arglist. Buffer overflow of this sort is not good,
as it means that anybody who is permitted to create functions can
completely break security.

Ian

Index: gram.y
===================================================================
RCS file: /home/projects/pgsql/cvsroot/pgsql/src/pl/plpgsql/src/gram.y,v
retrieving revision 1.20
diff -u -p -r1.20 gram.y
--- gram.y	2001/05/31 17:15:40	1.20
+++ gram.y	2001/06/06 06:35:46
@@ -385,7 +385,8 @@ decl_statement	: decl_varname decl_const
*cp2++ = '\\';
*cp2++ = *cp1++;
}
-						strcat(buf, "'");
+						*cp2++ = '\'';
+						*cp2 = '\0';
curname_def->query = strdup(buf);
new->default_val = curname_def;

---------------------------(end of broadcast)---------------------------
TIP 5: Have you checked our extensive FAQ?

http://www.postgresql.org/users-lounge/docs/faq.html

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026