]> granicus.if.org Git - postgresql/commitdiff
Reject invalid input in int2vectorin.
authorRobert Haas <rhaas@postgresql.org>
Wed, 30 Dec 2009 01:29:22 +0000 (01:29 +0000)
committerRobert Haas <rhaas@postgresql.org>
Wed, 30 Dec 2009 01:29:22 +0000 (01:29 +0000)
Since the int2vector type is intended only for internal use, this patch doesn't
worry about prettifying the error messages, which has the fringe benefit of
avoiding creating additional translatable strings.  For a type intended to be
used by end-users, we would want to do better, but the approach taken here
seems like the correct trade-off for this case.

Caleb Welton

src/backend/utils/adt/int.c

index 66cbca7079c9c430097cf8f82a7c62129f6125d9..18755894ae4dfb4718560f139209774a0e0ba332 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/utils/adt/int.c,v 1.86 2009/09/04 11:20:22 heikki Exp $
+ *       $PostgreSQL: pgsql/src/backend/utils/adt/int.c,v 1.87 2009/12/30 01:29:22 rhaas Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -146,10 +146,11 @@ int2vectorin(PG_FUNCTION_ARGS)
 
        for (n = 0; *intString && n < FUNC_MAX_ARGS; n++)
        {
-               if (sscanf(intString, "%hd", &result->values[n]) != 1)
-                       break;
                while (*intString && isspace((unsigned char) *intString))
                        intString++;
+               if (*intString == '\0')
+                       break;          
+               result->values[n] = pg_atoi(intString, sizeof(int16), ' ');
                while (*intString && !isspace((unsigned char) *intString))
                        intString++;
        }