1
0
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:
Alvaro Herrera
2015-03-09 17:00:43 -03:00
parent 31eae6028e
commit e3f1c24b99
2 changed files with 16 additions and 12 deletions

View File

@ -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);
}
/*