Skip to content

Commit 813895e

Browse files
committed
Don't pass oidvector by value.
Since the structure ends with a flexible array, doing so truncates any vector having more than one element. New in 9.3, so no back-patch.
1 parent fb435f4 commit 813895e

File tree

3 files changed

+6
-6
lines changed

3 files changed

+6
-6
lines changed

src/backend/commands/alter.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@ AlterObjectRename_internal(Relation rel, Oid objectId, const char *new_name)
231231
Form_pg_proc proc = (Form_pg_proc) GETSTRUCT(oldtup);
232232

233233
IsThereFunctionInNamespace(new_name, proc->pronargs,
234-
proc->proargtypes, proc->pronamespace);
234+
&proc->proargtypes, proc->pronamespace);
235235
}
236236
else if (classId == CollationRelationId)
237237
{
@@ -611,7 +611,7 @@ AlterObjectNamespace_internal(Relation rel, Oid objid, Oid nspOid)
611611
Form_pg_proc proc = (Form_pg_proc) GETSTRUCT(tup);
612612

613613
IsThereFunctionInNamespace(NameStr(proc->proname), proc->pronargs,
614-
proc->proargtypes, nspOid);
614+
&proc->proargtypes, nspOid);
615615
}
616616
else if (classId == CollationRelationId)
617617
{

src/backend/commands/functioncmds.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1626,18 +1626,18 @@ DropCastById(Oid castOid)
16261626
*/
16271627
void
16281628
IsThereFunctionInNamespace(const char *proname, int pronargs,
1629-
oidvector proargtypes, Oid nspOid)
1629+
oidvector *proargtypes, Oid nspOid)
16301630
{
16311631
/* check for duplicate name (more friendly than unique-index failure) */
16321632
if (SearchSysCacheExists3(PROCNAMEARGSNSP,
16331633
CStringGetDatum(proname),
1634-
PointerGetDatum(&proargtypes),
1634+
PointerGetDatum(proargtypes),
16351635
ObjectIdGetDatum(nspOid)))
16361636
ereport(ERROR,
16371637
(errcode(ERRCODE_DUPLICATE_FUNCTION),
16381638
errmsg("function %s already exists in schema \"%s\"",
16391639
funcname_signature_string(proname, pronargs,
1640-
NIL, proargtypes.values),
1640+
NIL, proargtypes->values),
16411641
get_namespace_name(nspOid))));
16421642
}
16431643

src/include/commands/defrem.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ extern Oid AlterFunction(AlterFunctionStmt *stmt);
5050
extern Oid CreateCast(CreateCastStmt *stmt);
5151
extern void DropCastById(Oid castOid);
5252
extern void IsThereFunctionInNamespace(const char *proname, int pronargs,
53-
oidvector proargtypes, Oid nspOid);
53+
oidvector *proargtypes, Oid nspOid);
5454
extern void ExecuteDoStmt(DoStmt *stmt);
5555
extern Oid get_cast_oid(Oid sourcetypeid, Oid targettypeid, bool missing_ok);
5656

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