Skip to content

Commit 8c44e9d

Browse files
Merge branch 'main' into neil/historicallyvalid
2 parents ac984c7 + 6697d93 commit 8c44e9d

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

59 files changed

+3552
-906
lines changed

.github/workflows/tests.yml

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ jobs:
2121
- name: Install Go
2222
uses: actions/setup-go@v3
2323
with:
24-
go-version: 1.18
24+
go-version: 1.23
2525
- name: golangci-lint
2626
uses: golangci/golangci-lint-action@v3
2727

@@ -33,7 +33,7 @@ jobs:
3333
strategy:
3434
fail-fast: false
3535
matrix:
36-
go: ["1.18", "1.19"]
36+
go: ["stable", "1.23"]
3737
steps:
3838
- uses: actions/checkout@v3
3939
- name: Setup go
@@ -50,7 +50,10 @@ jobs:
5050
${{ runner.os }}-go${{ matrix.go }}-test-
5151
- run: go test -race -coverpkg=./... -coverprofile=cover.out $(go list ./...)
5252
- name: Upload coverage to Codecov
53-
uses: codecov/codecov-action@v3
53+
uses: codecov/codecov-action@v4
54+
with:
55+
fail_ci_if_error: true
56+
token: ${{ secrets.CODECOV_TOKEN }}
5457

5558
# run go test on Dendrite with different go versions
5659
test-dendrite:
@@ -80,11 +83,11 @@ jobs:
8083
strategy:
8184
fail-fast: false
8285
matrix:
83-
go: ["1.18", "1.19"]
86+
go: ["stable", "1.23"]
8487
steps:
8588
- uses: actions/checkout@v3
8689
with:
87-
repository: "matrix-org/dendrite"
90+
repository: "element-hq/dendrite"
8891
- name: Install libolm
8992
run: sudo apt-get install libolm-dev libolm3
9093
- name: Setup go

.golangci.yml

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,14 @@ run:
22
timeout: 5m
33
linters:
44
enable:
5-
- vet
6-
- vetshadow
75
- typecheck
8-
- deadcode
96
- gocyclo
10-
- golint
11-
- varcheck
12-
- structcheck
13-
- maligned
147
- ineffassign
158
# - gosec - complains about weak cryptographic primitive sha1 and TLS InsecureSkipVerify set true in getTransport
169
- misspell
1710
- unparam
1811
- goimports
19-
- goconst
12+
# - goconst
2013
- unconvert
2114
- errcheck
22-
- interfacer
2315
# - testify - not available in golangci-lint

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@ gomatrixserverlib
33

44
[![GoDoc](https://godoc.org/github.com/matrix-org/gomatrixserverlib?status.svg)](https://godoc.org/github.com/matrix-org/gomatrixserverlib)
55

6-
Go library for common functions needed by matrix servers. This library assumes Go 1.18+.
6+
Go library for common functions needed by matrix servers. This library assumes Go 1.22+.

authstate.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ type FederatedStateProvider struct {
6565

6666
// StateIDsBeforeEvent implements StateProvider
6767
func (p *FederatedStateProvider) StateIDsBeforeEvent(ctx context.Context, event PDU) ([]string, error) {
68-
res, err := p.FedClient.LookupStateIDs(ctx, p.Origin, p.Server, event.RoomID(), event.EventID())
68+
res, err := p.FedClient.LookupStateIDs(ctx, p.Origin, p.Server, event.RoomID().String(), event.EventID())
6969
if err != nil {
7070
return nil, err
7171
}
@@ -77,7 +77,7 @@ func (p *FederatedStateProvider) StateIDsBeforeEvent(ctx context.Context, event
7777

7878
// StateBeforeEvent implements StateProvider
7979
func (p *FederatedStateProvider) StateBeforeEvent(ctx context.Context, roomVer RoomVersion, event PDU, eventIDs []string) (map[string]PDU, error) {
80-
res, err := p.FedClient.LookupState(ctx, p.Origin, p.Server, event.RoomID(), event.EventID(), roomVer)
80+
res, err := p.FedClient.LookupState(ctx, p.Origin, p.Server, event.RoomID().String(), event.EventID(), roomVer)
8181
if err != nil {
8282
return nil, err
8383
}
@@ -165,7 +165,7 @@ func checkAllowedByAuthEvents(
165165
event PDU, eventsByID map[string]PDU,
166166
missingAuth EventProvider, userIDForSender spec.UserIDForSender,
167167
) error {
168-
authEvents := NewAuthEvents(nil)
168+
authEvents, _ := NewAuthEvents(nil)
169169

170170
for _, ae := range event.AuthEventIDs() {
171171
retryEvent:
@@ -214,7 +214,7 @@ func checkAllowedByAuthEvents(
214214

215215
// If we made it this far then we've successfully got as many of the auth events as
216216
// as described by AuthEventIDs(). Check if they allow the event.
217-
if err := Allowed(event, &authEvents, userIDForSender); err != nil {
217+
if err := Allowed(event, authEvents, userIDForSender); err != nil {
218218
return fmt.Errorf(
219219
"gomatrixserverlib: event with ID %q is not allowed by its auth_events: %s",
220220
event.EventID(), err.Error(),
@@ -335,7 +335,7 @@ func CheckSendJoinResponse(
335335
}
336336

337337
eventsByID := map[string]PDU{}
338-
authEventProvider := NewAuthEvents(nil)
338+
authEventProvider, _ := NewAuthEvents(nil)
339339

340340
// Since checkAllowedByAuthEvents needs to be able to look up any of the
341341
// auth events by ID only, we will build a map which contains references
@@ -369,7 +369,7 @@ func CheckSendJoinResponse(
369369
}
370370

371371
// Now check that the join event is valid against the supplied state.
372-
if err := Allowed(joinEvent, &authEventProvider, userIDForSender); err != nil {
372+
if err := Allowed(joinEvent, authEventProvider, userIDForSender); err != nil {
373373
return nil, fmt.Errorf(
374374
"gomatrixserverlib: event with ID %q is not allowed by the current room state: %w",
375375
joinEvent.EventID(), err,

backfill.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,8 @@ func RequestBackfill(ctx context.Context, origin spec.ServerName, b BackfillRequ
9999
}
100100
}
101101

102-
return result, lastErr
102+
// Since we pulled in results from multiple servers we need to sort again...
103+
return ReverseTopologicalOrdering(result, TopologicalOrderByPrevEvents), lastErr
103104
}
104105

105106
/*

eventV1.go

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -104,8 +104,12 @@ func (e *eventV1) Version() RoomVersion {
104104
return e.roomVersion
105105
}
106106

107-
func (e *eventV1) RoomID() string {
108-
return e.eventFields.RoomID
107+
func (e *eventV1) RoomID() spec.RoomID {
108+
roomID, err := spec.NewRoomID(e.eventFields.RoomID)
109+
if err != nil {
110+
panic(fmt.Errorf("RoomID is invalid: %w", err))
111+
}
112+
return *roomID
109113
}
110114

111115
func (e *eventV1) Redacts() string {
@@ -211,8 +215,7 @@ func (e *eventV1) SetUnsignedField(path string, value interface{}) error {
211215
eventJSON = CanonicalJSONAssumeValid(eventJSON)
212216

213217
res := gjson.GetBytes(eventJSON, "unsigned")
214-
unsigned := RawJSONFromResult(res, eventJSON)
215-
e.eventFields.Unsigned = unsigned
218+
e.eventFields.Unsigned = []byte(res.Raw)
216219

217220
e.eventJSON = eventJSON
218221

@@ -280,6 +283,10 @@ func newEventFromUntrustedJSONV1(eventJSON []byte, roomVersion IRoomVersion) (PD
280283
return nil, err
281284
}
282285

286+
if err := checkID(res.eventFields.RoomID, "room", '!'); err != nil {
287+
return nil, err
288+
}
289+
283290
// We know the JSON must be valid here.
284291
eventJSON = CanonicalJSONAssumeValid(eventJSON)
285292

@@ -323,6 +330,11 @@ func newEventFromTrustedJSONV1(eventJSON []byte, redacted bool, roomVersion IRoo
323330
if err := json.Unmarshal(eventJSON, &res); err != nil {
324331
return nil, err
325332
}
333+
334+
if err := checkID(res.eventFields.RoomID, "room", '!'); err != nil {
335+
return nil, fmt.Errorf("RoomID is invalid: %w", err)
336+
}
337+
326338
res.eventJSON = eventJSON
327339
res.roomVersion = roomVersion.Version()
328340
res.redacted = redacted
@@ -334,6 +346,11 @@ func newEventFromTrustedJSONWithEventIDV1(eventID string, eventJSON []byte, reda
334346
if err := json.Unmarshal(eventJSON, &res); err != nil {
335347
return nil, err
336348
}
349+
350+
if err := checkID(res.eventFields.RoomID, "room", '!'); err != nil {
351+
return nil, err
352+
}
353+
337354
res.EventIDRaw = eventID
338355
res.eventJSON = eventJSON
339356
res.roomVersion = roomVersion.Version()

eventV2.go

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,11 @@ func newEventFromUntrustedJSONV2(eventJSON []byte, roomVersion IRoomVersion) (PD
140140
if err = json.Unmarshal(eventJSON, &res); err != nil {
141141
return nil, err
142142
}
143+
144+
if err := checkID(res.eventFields.RoomID, "room", '!'); err != nil {
145+
return nil, err
146+
}
147+
143148
res.roomVersion = roomVersion.Version()
144149

145150
// We know the JSON must be valid here.
@@ -191,6 +196,9 @@ var lenientByteLimitRoomVersions = map[RoomVersion]struct{}{
191196
RoomVersionV8: {},
192197
RoomVersionV9: {},
193198
RoomVersionV10: {},
199+
RoomVersionV11: {},
200+
RoomVersionV12: {},
201+
RoomVersionHydra: {},
194202
RoomVersionPseudoIDs: {},
195203
"org.matrix.msc3787": {},
196204
"org.matrix.msc3667": {},
@@ -245,10 +253,6 @@ func CheckFields(input PDU) error { // nolint: gocyclo
245253
}
246254
}
247255

248-
if err := checkID(input.RoomID(), "room", '!'); err != nil {
249-
return err
250-
}
251-
252256
switch input.Version() {
253257
case RoomVersionPseudoIDs:
254258
default:
@@ -265,6 +269,11 @@ func newEventFromTrustedJSONV2(eventJSON []byte, redacted bool, roomVersion IRoo
265269
if err := json.Unmarshal(eventJSON, &res); err != nil {
266270
return nil, err
267271
}
272+
273+
if err := checkID(res.eventFields.RoomID, "room", '!'); err != nil {
274+
return nil, err
275+
}
276+
268277
res.roomVersion = roomVersion.Version()
269278
res.redacted = redacted
270279
res.eventJSON = eventJSON
@@ -276,6 +285,11 @@ func newEventFromTrustedJSONWithEventIDV2(eventID string, eventJSON []byte, reda
276285
if err := json.Unmarshal(eventJSON, &res); err != nil {
277286
return nil, err
278287
}
288+
289+
if err := checkID(res.eventFields.RoomID, "room", '!'); err != nil {
290+
return nil, err
291+
}
292+
279293
res.roomVersion = roomVersion.Version()
280294
res.eventJSON = eventJSON
281295
res.EventIDRaw = eventID

eventV2_test.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -152,9 +152,11 @@ func TestCheckFields(t *testing.T) {
152152
t.Run(tt.name+"-"+string(roomVersion), func(t *testing.T) {
153153
ev, err := MustGetRoomVersion(roomVersion).NewEventBuilderFromProtoEvent(&tt.input).Build(time.Now(), "localhost", "ed25519:1", sk)
154154
tt.wantErr(t, err)
155-
err = CheckFields(ev)
156-
tt.wantErr(t, err, fmt.Sprintf("CheckFields(%v)", tt.input))
157-
t.Logf("%v", err)
155+
if ev != nil {
156+
err = CheckFields(ev)
157+
tt.wantErr(t, err, fmt.Sprintf("CheckFields(%v)", tt.input))
158+
t.Logf("%v", err)
159+
}
158160
switch e := err.(type) {
159161
case EventValidationError:
160162
assert.Equalf(t, tt.wantPersistable, e.Persistable, "unexpected persistable")

0 commit comments

Comments
 (0)