aboutsummaryrefslogtreecommitdiff
path: root/src/backend/utils/adt/nabstime.c
diff options
context:
space:
mode:
authorThomas G. Lockhart <lockhart@fourpalms.org>2002-08-04 06:44:47 +0000
committerThomas G. Lockhart <lockhart@fourpalms.org>2002-08-04 06:44:47 +0000
commitb71310d8e02f8f0b3006aa5e634f9218f0f0cedc (patch)
treeed7c3250bae2f4b46f56910477dcf994287fdadf /src/backend/utils/adt/nabstime.c
parente025bb7a725610e327401d7afacedaad7079b989 (diff)
downloadpostgresql-b71310d8e02f8f0b3006aa5e634f9218f0f0cedc.tar.gz
postgresql-b71310d8e02f8f0b3006aa5e634f9218f0f0cedc.zip
Add guard code to protect from buffer overruns on long date/time input
strings. Should go back in and look at doing this a bit more elegantly and (hopefully) cheaper. Probably not too bad anyway, but it seems a shame to scan the strings twice: once for length for this buffer overrun protection, and once to parse the line. Remove use of pow() in date/time handling; was already gone from everything *but* the time data types. Define macros for handling typmod manipulation for date/time types. Should be more robust than all of that brute-force inline code. Rename macros for masking and typmod manipulation to put TIMESTAMP_ or INTERVAL_ in front of the macro name, to reduce the possibility of name space collisions.
Diffstat (limited to 'src/backend/utils/adt/nabstime.c')
-rw-r--r--src/backend/utils/adt/nabstime.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/src/backend/utils/adt/nabstime.c b/src/backend/utils/adt/nabstime.c
index fdb144f0e94..d2e73d1d5e5 100644
--- a/src/backend/utils/adt/nabstime.c
+++ b/src/backend/utils/adt/nabstime.c
@@ -9,7 +9,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/utils/adt/nabstime.c,v 1.95 2002/06/20 20:29:37 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/adt/nabstime.c,v 1.96 2002/08/04 06:44:47 thomas Exp $
*
* NOTES
*
@@ -486,8 +486,8 @@ nabstimein(PG_FUNCTION_ARGS)
int nf,
ftype[MAXDATEFIELDS];
- if (strlen(str) > MAXDATELEN)
- elog(ERROR, "Bad (length) abstime external representation '%s'", str);
+ if (strlen(str) >= sizeof(lowstr))
+ elog(ERROR, "Bad abstime external representation (too long) '%s'", str);
if ((ParseDateTime(str, lowstr, field, ftype, MAXDATEFIELDS, &nf) != 0)
|| (DecodeDateTime(field, ftype, nf, &dtype, tm, &fsec, &tz) != 0))
@@ -849,8 +849,8 @@ reltimein(PG_FUNCTION_ARGS)
ftype[MAXDATEFIELDS];
char lowstr[MAXDATELEN + 1];
- if (strlen(str) > MAXDATELEN)
- elog(ERROR, "Bad (length) reltime external representation '%s'", str);
+ if (strlen(str) >= sizeof(lowstr))
+ elog(ERROR, "Bad reltime external representation (too long) '%s'", str);
if ((ParseDateTime(str, lowstr, field, ftype, MAXDATEFIELDS, &nf) != 0)
|| (DecodeInterval(field, ftype, nf, &dtype, tm, &fsec) != 0))