mirror of
https://github.com/matrix-org/dendrite.git
synced 2025-12-07 23:13:11 -06:00
fix QueryMembershipForUserID nil-deref for pseudoID rooms
This commit is contained in:
parent
c7193e24d0
commit
ff18671fb0
|
|
@ -230,6 +230,31 @@ func (r *Queryer) QueryMembershipForSenderID(
|
||||||
senderID spec.SenderID,
|
senderID spec.SenderID,
|
||||||
response *api.QueryMembershipForUserResponse,
|
response *api.QueryMembershipForUserResponse,
|
||||||
) error {
|
) error {
|
||||||
|
return r.queryMembershipForOptionalSenderID(ctx, roomID, &senderID, response)
|
||||||
|
}
|
||||||
|
|
||||||
|
// QueryMembershipForUser implements api.RoomserverInternalAPI
|
||||||
|
func (r *Queryer) QueryMembershipForUser(
|
||||||
|
ctx context.Context,
|
||||||
|
request *api.QueryMembershipForUserRequest,
|
||||||
|
response *api.QueryMembershipForUserResponse,
|
||||||
|
) error {
|
||||||
|
roomID, err := spec.NewRoomID(request.RoomID)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
senderID, err := r.QuerySenderIDForUser(ctx, *roomID, request.UserID)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return r.queryMembershipForOptionalSenderID(ctx, *roomID, senderID, response)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Query membership information for provided sender ID and room ID
|
||||||
|
//
|
||||||
|
// If sender ID is nil, then act as if the provided sender is not a member of the room.
|
||||||
|
func (r *Queryer) queryMembershipForOptionalSenderID(ctx context.Context, roomID spec.RoomID, senderID *spec.SenderID, response *api.QueryMembershipForUserResponse) error {
|
||||||
info, err := r.DB.RoomInfo(ctx, roomID.String())
|
info, err := r.DB.RoomInfo(ctx, roomID.String())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
|
@ -240,7 +265,11 @@ func (r *Queryer) QueryMembershipForSenderID(
|
||||||
}
|
}
|
||||||
response.RoomExists = true
|
response.RoomExists = true
|
||||||
|
|
||||||
membershipEventNID, stillInRoom, isRoomforgotten, err := r.DB.GetMembership(ctx, info.RoomNID, senderID)
|
if senderID == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
membershipEventNID, stillInRoom, isRoomforgotten, err := r.DB.GetMembership(ctx, info.RoomNID, *senderID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
@ -268,24 +297,6 @@ func (r *Queryer) QueryMembershipForSenderID(
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// QueryMembershipForUser implements api.RoomserverInternalAPI
|
|
||||||
func (r *Queryer) QueryMembershipForUser(
|
|
||||||
ctx context.Context,
|
|
||||||
request *api.QueryMembershipForUserRequest,
|
|
||||||
response *api.QueryMembershipForUserResponse,
|
|
||||||
) error {
|
|
||||||
roomID, err := spec.NewRoomID(request.RoomID)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
senderID, err := r.QuerySenderIDForUser(ctx, *roomID, request.UserID)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
return r.QueryMembershipForSenderID(ctx, *roomID, *senderID, response)
|
|
||||||
}
|
|
||||||
|
|
||||||
// QueryMembershipAtEvent returns the known memberships at a given event.
|
// QueryMembershipAtEvent returns the known memberships at a given event.
|
||||||
// If the state before an event is not known, an empty list will be returned
|
// If the state before an event is not known, an empty list will be returned
|
||||||
// for that event instead.
|
// for that event instead.
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue