Wrong boundary condition on number-of-args check.
authorTom Lane
Tue, 11 Jan 2000 05:22:25 +0000 (05:22 +0000)
committerTom Lane
Tue, 11 Jan 2000 05:22:25 +0000 (05:22 +0000)
src/backend/catalog/pg_proc.c

index 3e1c6c4667ded27acb858b94f6032f151714d75e..90232daa092699f08a71b7d07c3bfacc2a6a65ac 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/catalog/pg_proc.c,v 1.38 2000/01/11 02:30:05 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/catalog/pg_proc.c,v 1.39 2000/01/11 05:22:25 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -80,8 +80,9 @@ ProcedureCreate(char *procedureName,
    {
        Value      *t = lfirst(x);
 
-       if (parameterCount > FUNC_MAX_ARGS)
-           elog(ERROR, "Procedures cannot take more than %d arguments",FUNC_MAX_ARGS);
+       if (parameterCount >= FUNC_MAX_ARGS)
+           elog(ERROR, "Procedures cannot take more than %d arguments",
+                FUNC_MAX_ARGS);
 
        if (strcmp(strVal(t), "opaque") == 0)
        {
@@ -172,7 +173,6 @@ ProcedureCreate(char *procedureName,
            elog(ERROR, "ProcedureCreate: sql functions cannot return type \"opaque\"");
        typeObjectId = 0;
    }
-
    else
    {
        typeObjectId = TypeGet(returnTypeName, &defined);
@@ -192,7 +192,6 @@ ProcedureCreate(char *procedureName,
                     returnTypeName);
            }
        }
-
        else if (!defined)
        {
            elog(NOTICE, "ProcedureCreate: return type '%s' is only a shell",
@@ -247,7 +246,7 @@ ProcedureCreate(char *procedureName,
            prosrc = procedureName;
        if (fmgr_lookupByName(prosrc) == (func_ptr) NULL)
            elog(ERROR,
-           "ProcedureCreate: there is no builtin function named \"%s\"",
+                "ProcedureCreate: there is no builtin function named \"%s\"",
                 prosrc);
    }
 
@@ -266,30 +265,18 @@ ProcedureCreate(char *procedureName,
    values[i++] = NameGetDatum(&procname);
    values[i++] = Int32GetDatum(GetUserId());
    values[i++] = ObjectIdGetDatum(languageObjectId);
-
    /* XXX isinherited is always false for now */
-
    values[i++] = Int8GetDatum((bool) 0);
-
-   /* XXX istrusted is always false for now */
-
    values[i++] = Int8GetDatum(trusted);
    values[i++] = Int8GetDatum(canCache);
    values[i++] = UInt16GetDatum(parameterCount);
    values[i++] = Int8GetDatum(returnsSet);
    values[i++] = ObjectIdGetDatum(typeObjectId);
-
    values[i++] = (Datum) typev;
-
-   /*
-    * The following assignments of constants are made.  The real values
-    * will have to be extracted from the arglist someday soon.
-    */
    values[i++] = Int32GetDatum(byte_pct);      /* probyte_pct */
    values[i++] = Int32GetDatum(perbyte_cpu);   /* properbyte_cpu */
    values[i++] = Int32GetDatum(percall_cpu);   /* propercall_cpu */
    values[i++] = Int32GetDatum(outin_ratio);   /* prooutin_ratio */
-
    values[i++] = (Datum) fmgr(F_TEXTIN, prosrc);       /* prosrc */
    values[i++] = (Datum) fmgr(F_TEXTIN, probin);       /* probin */