Skip to content

Commit 488f315

Browse files
committed
Defend against > INDEX_MAX_KEYS keys in an index.
1 parent 8acc568 commit 488f315

File tree

1 file changed

+11
-8
lines changed

1 file changed

+11
-8
lines changed

src/backend/commands/indexcmds.c

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
/*-------------------------------------------------------------------------
22
*
3-
* defind.c
3+
* indexcmds.c
44
* POSTGRES define, extend and remove index code.
55
*
66
* Copyright (c) 1994, Regents of the University of California
77
*
88
*
99
* IDENTIFICATION
10-
* $Header: /cvsroot/pgsql/src/backend/commands/indexcmds.c,v 1.18 2000/01/11 03:33:11 momjian Exp $
10+
* $Header: /cvsroot/pgsql/src/backend/commands/indexcmds.c,v 1.19 2000/01/12 05:04:42 tgl Exp $
1111
*
1212
*-------------------------------------------------------------------------
1313
*/
@@ -87,6 +87,9 @@ DefineIndex(char *heapRelationName,
8787
numberOfAttributes = length(attributeList);
8888
if (numberOfAttributes <= 0)
8989
elog(ERROR, "DefineIndex: must specify at least one attribute");
90+
if (numberOfAttributes > INDEX_MAX_KEYS)
91+
elog(ERROR, "Cannot use more than %d attributes in an index",
92+
INDEX_MAX_KEYS);
9093

9194
/*
9295
* compute heap relation id
@@ -152,10 +155,8 @@ DefineIndex(char *heapRelationName,
152155

153156
nargs = length(funcIndex->args);
154157
if (nargs > INDEX_MAX_KEYS)
155-
{
156-
elog(ERROR,
157-
"Too many args to function, limit of %d", INDEX_MAX_KEYS);
158-
}
158+
elog(ERROR, "Index function can take at most %d arguments",
159+
INDEX_MAX_KEYS);
159160

160161
FIsetnArgs(&fInfo, nargs);
161162

@@ -258,10 +259,12 @@ ExtendIndex(char *indexRelationName, Expr *predicate, List *rangetable)
258259
relationId = index->indrelid;
259260
indproc = index->indproc;
260261

261-
for (i = INDEX_MAX_KEYS-1; i >= 0; i--)
262+
for (i = 0; i < INDEX_MAX_KEYS; i++)
263+
{
262264
if (index->indkey[i] == InvalidAttrNumber)
263265
break;
264-
numberOfAttributes = i+1;
266+
}
267+
numberOfAttributes = i;
265268

266269
if (VARSIZE(&index->indpred) != 0)
267270
{

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy