mirror of
https://github.com/postgres/postgres.git
synced 2025-07-03 20:02:46 +03:00
Fix crasher bugs in previous commit
ALTER DEFAULT PRIVILEGES was trying to decode the list of roles in the FOR clause as a list of names rather than of RoleSpecs; and the IN clause in CREATE ROLE was doing the same thing. This was evidenced by crashes on some buildfarm machines, though on my platform this doesn't cause a failure by mere chance; I can reproduce the failures only by adding some padding in struct RoleSpecs. Fix by dereferencing those lists as being of RoleSpecs, not string Values.
This commit is contained in:
@ -429,13 +429,17 @@ CreateRole(CreateRoleStmt *stmt)
|
||||
*/
|
||||
foreach(item, addroleto)
|
||||
{
|
||||
char *oldrolename = strVal(lfirst(item));
|
||||
Oid oldroleid = get_role_oid(oldrolename, false);
|
||||
RoleSpec *oldrole = lfirst(item);
|
||||
HeapTuple oldroletup = get_rolespec_tuple((Node *) oldrole);
|
||||
Oid oldroleid = HeapTupleGetOid(oldroletup);
|
||||
char *oldrolename = NameStr(((Form_pg_authid) GETSTRUCT(oldroletup))->rolname);
|
||||
|
||||
AddRoleMems(oldrolename, oldroleid,
|
||||
list_make1(makeString(stmt->role)),
|
||||
list_make1_oid(roleid),
|
||||
GetUserId(), false);
|
||||
|
||||
ReleaseSysCache(oldroletup);
|
||||
}
|
||||
|
||||
/*
|
||||
|
Reference in New Issue
Block a user