Skip to content

Commit 6c4a1f5

Browse files
authored
Merge pull request #1078 from kmycode/kb-draft-22.0
Release: 22.0
2 parents 00ac88b + 9fdc20e commit 6c4a1f5

124 files changed

Lines changed: 529 additions & 306 deletions

File tree

Some content is hidden

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

CHANGELOG.md

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,31 @@
22

33
All notable changes to this project will be documented in this file.
44

5+
## [4.5.4] - 2026-01-07
6+
7+
### Security
8+
9+
- Fix SSRF protection bypass ([GHSA](https://github.com/mastodon/mastodon/security/advisories/GHSA-xfrj-c749-jxxq))
10+
- Fix missing ownership check in severed relationships controller ([GHSA](https://github.com/mastodon/mastodon/security/advisories/GHSA-ww85-x9cp-5v24))
11+
12+
### Changed
13+
14+
- Change HTTP Signature verification status from 401 to 503 on temporary failure to get remote actor (#37221 by @ClearlyClaire)
15+
16+
### Fixed
17+
18+
- Fix custom emojis not being rendered in profile fields (#37365 by @ClearlyClaire)
19+
- Fix serialization of context pages (#37376 by @ClearlyClaire)
20+
- Fix quotes with CWs but no text not having fallback link (#37361 by @ClearlyClaire)
21+
- Fix outdated link target for “locked” warning (#37366 by @ClearlyClaire)
22+
- Fix local custom emojis sometimes being rendered in remote posts (#37284 by @ChaosExAnima)
23+
- Fix some assets not being loaded from configured CDN (#37310 by @ChaosExAnima)
24+
- Fix notifications page error in Tor browser (#37285 by @diondiondion)
25+
- Fix custom emojis not being displayed in CWs and fav/boost notifications (#37272 and #37306 by @ChaosExAnima and @ClearlyClaire)
26+
- Fix default `Admin` role not including `view_feeds` permission (#37301 by @ClearlyClaire)
27+
- Fix hashtag autocomplete replacing suggestion's first characters with input (#37281 by @ClearlyClaire)
28+
- Fix mentions of domain-blocked users being processed (#37257 by @ClearlyClaire)
29+
530
## [4.5.3] - 2025-12-08
631

732
### Security

Gemfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ gem 'ruby-vips', '~> 2.2', require: false
2424

2525
gem 'active_model_serializers', '~> 0.10'
2626
gem 'addressable', '~> 2.8'
27-
gem 'bootsnap', '~> 1.19.0', require: false
27+
gem 'bootsnap', require: false
2828
gem 'browser'
2929
gem 'charlock_holmes', '~> 0.7.7'
3030
gem 'chewy', '~> 7.3'

Gemfile.lock

Lines changed: 30 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ GEM
118118
rexml
119119
base64 (0.3.0)
120120
bcp47_spec (0.2.1)
121-
bcrypt (3.1.20)
121+
bcrypt (3.1.21)
122122
benchmark (0.5.0)
123123
better_errors (2.10.1)
124124
erubi (>= 1.0.0)
@@ -129,7 +129,7 @@ GEM
129129
binding_of_caller (1.0.1)
130130
debug_inspector (>= 1.2.0)
131131
blurhash (0.1.8)
132-
bootsnap (1.19.0)
132+
bootsnap (1.20.1)
133133
msgpack (~> 1.2)
134134
brakeman (7.1.2)
135135
racc
@@ -240,15 +240,15 @@ GEM
240240
faraday-net_http (>= 2.0, < 3.5)
241241
json
242242
logger
243-
faraday-follow_redirects (0.4.0)
243+
faraday-follow_redirects (0.5.0)
244244
faraday (>= 1, < 3)
245245
faraday-httpclient (2.0.2)
246246
httpclient (>= 2.2)
247247
faraday-net_http (3.4.2)
248248
net-http (~> 0.5)
249249
fast_blank (1.0.1)
250250
fastimage (2.4.0)
251-
ffi (1.17.2)
251+
ffi (1.17.3)
252252
ffi-compiler (1.3.2)
253253
ffi (>= 1.15.5)
254254
rake
@@ -271,7 +271,7 @@ GEM
271271
fog-json (>= 1.0)
272272
formatador (1.2.3)
273273
reline
274-
forwardable (1.3.3)
274+
forwardable (1.4.0)
275275
fugit (1.12.1)
276276
et-orbi (~> 1.4)
277277
raabro (~> 1.4)
@@ -298,7 +298,8 @@ GEM
298298
rubocop (>= 1.0)
299299
sysexits (~> 1.1)
300300
hashdiff (1.2.1)
301-
hashie (5.0.0)
301+
hashie (5.1.0)
302+
logger
302303
hcaptcha (7.1.0)
303304
json
304305
highline (3.1.2)
@@ -427,7 +428,7 @@ GEM
427428
activesupport (>= 4)
428429
railties (>= 4)
429430
request_store (~> 1.0)
430-
loofah (2.24.1)
431+
loofah (2.25.0)
431432
crass (~> 1.0.2)
432433
nokogiri (>= 1.12.0)
433434
mail (2.9.0)
@@ -447,13 +448,14 @@ GEM
447448
mime-types-data (3.2025.0924)
448449
mini_mime (1.1.5)
449450
mini_portile2 (2.8.9)
450-
minitest (5.27.0)
451+
minitest (6.0.1)
452+
prism (~> 1.5)
451453
msgpack (1.8.0)
452-
multi_json (1.18.0)
454+
multi_json (1.19.1)
453455
mutex_m (0.3.0)
454456
net-http (0.6.0)
455457
uri
456-
net-imap (0.6.0)
458+
net-imap (0.6.2)
457459
date
458460
net-protocol
459461
net-ldap (0.20.0)
@@ -466,7 +468,7 @@ GEM
466468
net-smtp (0.5.1)
467469
net-protocol
468470
nio4r (2.7.5)
469-
nokogiri (1.18.10)
471+
nokogiri (1.19.0)
470472
mini_portile2 (~> 2.8.2)
471473
racc (~> 1.4)
472474
oj (3.16.13)
@@ -591,7 +593,7 @@ GEM
591593
parslet (2.0.0)
592594
pastel (0.8.0)
593595
tty-color (~> 0.5)
594-
pg (1.6.2)
596+
pg (1.6.3)
595597
pghero (3.7.0)
596598
activerecord (>= 7.1)
597599
playwright-ruby-client (1.57.1)
@@ -609,7 +611,7 @@ GEM
609611
net-smtp
610612
premailer (~> 1.7, >= 1.7.9)
611613
prettyprint (0.2.0)
612-
prism (1.6.0)
614+
prism (1.7.0)
613615
prometheus_exporter (2.3.1)
614616
webrick
615617
propshaft (1.3.1)
@@ -619,7 +621,7 @@ GEM
619621
psych (5.3.1)
620622
date
621623
stringio
622-
public_suffix (7.0.0)
624+
public_suffix (7.0.2)
623625
puma (7.1.0)
624626
nio4r (~> 2.0)
625627
pundit (2.5.2)
@@ -696,7 +698,7 @@ GEM
696698
readline (~> 0.0)
697699
rdf-normalize (0.7.0)
698700
rdf (~> 3.3)
699-
rdoc (6.17.0)
701+
rdoc (7.0.3)
700702
erb
701703
psych (>= 4.0.0)
702704
tsort
@@ -716,7 +718,7 @@ GEM
716718
railties (>= 7.0)
717719
rexml (3.4.4)
718720
rotp (6.3.0)
719-
rouge (4.6.1)
721+
rouge (4.7.0)
720722
rpam2 (4.0.2)
721723
rqrcode (3.1.1)
722724
chunky_png (~> 1.0)
@@ -761,9 +763,9 @@ GEM
761763
rubocop-ast (>= 1.47.1, < 2.0)
762764
ruby-progressbar (~> 1.7)
763765
unicode-display_width (>= 2.4.0, < 4.0)
764-
rubocop-ast (1.48.0)
766+
rubocop-ast (1.49.0)
765767
parser (>= 3.3.7.2)
766-
prism (~> 1.4)
768+
prism (~> 1.7)
767769
rubocop-capybara (2.22.1)
768770
lint_roller (~> 1.1)
769771
rubocop (~> 1.72, >= 1.72.1)
@@ -774,7 +776,7 @@ GEM
774776
lint_roller (~> 1.1)
775777
rubocop (>= 1.75.0, < 2.0)
776778
rubocop-ast (>= 1.47.1, < 2.0)
777-
rubocop-rails (2.34.2)
779+
rubocop-rails (2.34.3)
778780
activesupport (>= 4.2.0)
779781
lint_roller (~> 1.1)
780782
rack (>= 1.1)
@@ -821,13 +823,13 @@ GEM
821823
sidekiq-scheduler (6.0.1)
822824
rufus-scheduler (~> 3.2)
823825
sidekiq (>= 7.3, < 9)
824-
sidekiq-unique-jobs (8.0.12)
826+
sidekiq-unique-jobs (8.0.11)
825827
concurrent-ruby (~> 1.0, >= 1.0.5)
826828
sidekiq (>= 7.0.0, < 9.0.0)
827829
thor (>= 1.0, < 3.0)
828830
simple-navigation (4.4.0)
829831
activesupport (>= 2.3.2)
830-
simple_form (5.4.0)
832+
simple_form (5.4.1)
831833
actionpack (>= 7.0)
832834
activemodel (>= 7.0)
833835
simplecov (0.22.0)
@@ -860,7 +862,7 @@ GEM
860862
test-prof (1.5.0)
861863
thor (1.4.0)
862864
tilt (2.6.1)
863-
timeout (0.5.0)
865+
timeout (0.6.0)
864866
tpm-key_attestation (0.14.1)
865867
bindata (~> 2.4)
866868
openssl (> 2.0)
@@ -888,13 +890,13 @@ GEM
888890
unf_ext (0.0.9.1)
889891
unicode-display_width (3.2.0)
890892
unicode-emoji (~> 4.1)
891-
unicode-emoji (4.1.0)
893+
unicode-emoji (4.2.0)
892894
uri (1.1.1)
893895
useragent (0.16.11)
894896
validate_url (1.0.15)
895897
activemodel (>= 3.0.0)
896898
public_suffix
897-
vite_rails (3.0.19)
899+
vite_rails (3.0.20)
898900
railties (>= 5.1, < 9)
899901
vite_ruby (~> 3.0, >= 3.2.2)
900902
vite_ruby (3.9.2)
@@ -930,7 +932,7 @@ GEM
930932
xorcist (1.1.3)
931933
xpath (3.2.0)
932934
nokogiri (~> 1.8)
933-
zeitwerk (2.7.3)
935+
zeitwerk (2.7.4)
934936

935937
PLATFORMS
936938
ruby
@@ -944,7 +946,7 @@ DEPENDENCIES
944946
better_errors (~> 2.9)
945947
binding_of_caller (~> 1.0)
946948
blurhash (~> 0.1)
947-
bootsnap (~> 1.19.0)
949+
bootsnap
948950
brakeman (~> 7.0)
949951
browser
950952
bundler-audit (~> 0.9)
@@ -1091,7 +1093,7 @@ DEPENDENCIES
10911093
xorcist (~> 1.1)
10921094

10931095
RUBY VERSION
1094-
ruby 3.4.1p0
1096+
ruby 3.4.8
10951097

10961098
BUNDLED WITH
1097-
4.0.2
1099+
4.0.3

app/controllers/activitypub/contexts_controller.rb

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,8 @@ def set_items
3636

3737
def context_presenter
3838
first_page = ActivityPub::CollectionPresenter.new(
39-
id: items_context_url(@conversation, page_params),
4039
type: :unordered,
41-
part_of: items_context_url(@conversation),
40+
part_of: context_url(@conversation),
4241
next: next_page,
4342
items: @items.map { |status| status.local? ? ActivityPub::TagManager.instance.uri_for(status) : status.uri }
4443
)
@@ -52,7 +51,7 @@ def items_collection_presenter
5251
page = ActivityPub::CollectionPresenter.new(
5352
id: items_context_url(@conversation, page_params),
5453
type: :unordered,
55-
part_of: items_context_url(@conversation),
54+
part_of: context_url(@conversation),
5655
next: next_page,
5756
items: @items.map { |status| status.local? ? ActivityPub::TagManager.instance.uri_for(status) : status.uri }
5857
)

app/controllers/severed_relationships_controller.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ def followers
2626
private
2727

2828
def set_event
29-
@event = AccountRelationshipSeveranceEvent.find(params[:id])
29+
@event = AccountRelationshipSeveranceEvent.where(account: current_account).find(params[:id])
3030
end
3131

3232
def following_data

app/javascript/mastodon/components/account_fields.tsx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import CheckIcon from '@/material-icons/400-24px/check.svg?react';
66
import { Icon } from 'mastodon/components/icon';
77
import type { Account } from 'mastodon/models/account';
88

9-
import { CustomEmojiProvider } from './emoji/context';
109
import { EmojiHTML } from './emoji/html';
1110
import { useElementHandledLink } from './status/handled_link';
1211

@@ -22,12 +21,13 @@ export const AccountFields: React.FC<Pick<Account, 'fields' | 'emojis'>> = ({
2221
}
2322

2423
return (
25-
<CustomEmojiProvider emojis={emojis}>
24+
<>
2625
{fields.map((pair, i) => (
2726
<dl key={i} className={classNames({ verified: pair.verified_at })}>
2827
<EmojiHTML
2928
as='dt'
3029
htmlString={pair.name_emojified}
30+
extraEmojis={emojis}
3131
className='translate'
3232
{...htmlHandlers}
3333
/>
@@ -52,12 +52,13 @@ export const AccountFields: React.FC<Pick<Account, 'fields' | 'emojis'>> = ({
5252
<EmojiHTML
5353
as='span'
5454
htmlString={pair.value_emojified}
55+
extraEmojis={emojis}
5556
{...htmlHandlers}
5657
/>
5758
</dd>
5859
</dl>
5960
))}
60-
</CustomEmojiProvider>
61+
</>
6162
);
6263
};
6364

app/javascript/mastodon/features/compose/components/warning.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ export const Warning = () => {
4949
defaultMessage='Your account is not {locked}. Anyone can follow you to view your follower-only posts.'
5050
values={{
5151
locked: (
52-
<a href='/settings/profile'>
52+
<a href='/settings/privacy#account_unlocked'>
5353
<FormattedMessage
5454
id='compose_form.lock_disclaimer.lock'
5555
defaultMessage='locked'

app/javascript/mastodon/locales/ca.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -491,6 +491,7 @@
491491
"keyboard_shortcuts.column": "Centra la columna",
492492
"keyboard_shortcuts.compose": "Centra l'àrea de composició de text",
493493
"keyboard_shortcuts.description": "Descripció",
494+
"keyboard_shortcuts.direct": "Obre la columna de mencions privades",
494495
"keyboard_shortcuts.down": "Abaixa a la llista",
495496
"keyboard_shortcuts.enter": "Obre el tut",
496497
"keyboard_shortcuts.favourite": "Tut afavorit",

app/javascript/mastodon/locales/cs.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -517,6 +517,7 @@
517517
"keyboard_shortcuts.column": "Focus na sloupec",
518518
"keyboard_shortcuts.compose": "Zaměřit se na textové pole nového příspěvku",
519519
"keyboard_shortcuts.description": "Popis",
520+
"keyboard_shortcuts.direct": "Otevřít sloupec soukromých zmínek",
520521
"keyboard_shortcuts.down": "Posunout v seznamu dolů",
521522
"keyboard_shortcuts.enter": "Otevřít příspěvek",
522523
"keyboard_shortcuts.favourite": "Oblíbit si příspěvek",

0 commit comments

Comments
 (0)