Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
bc71218
Bump version to 22.0
kmycode Jan 4, 2026
cd98064
Update dependency public_suffix to v7.0.1 (#37383)
renovate[bot] Jan 5, 2026
ab72932
Update dependency public_suffix to v7.0.2 (#37385)
renovate[bot] Jan 5, 2026
bdf490e
New Crowdin Translations (automated) (#37378)
github-actions[bot] Jan 5, 2026
e8a49bd
Fix outdated link target for “locked” warning (#37366)
ClearlyClaire Jan 5, 2026
1fe737e
Add translation string for Webauthn key nickname (#37371)
ClearlyClaire Jan 5, 2026
f711e22
Fix quotes with CWs but no text not having fallback link (#37361)
ClearlyClaire Jan 5, 2026
b5bc301
Fix serialization of context pages (#37376)
ClearlyClaire Jan 5, 2026
ad9cc10
Update dependency vite_rails to v3.0.20 (#37380)
renovate[bot] Jan 5, 2026
b622f4c
Fix custom emojis not being rendered in profile fields (#37365)
ClearlyClaire Jan 5, 2026
2d711d6
Update dependency simple_form to v5.4.1 (#37387)
renovate[bot] Jan 5, 2026
82fb259
Fix posts with edited out media attachments being returned in `/api/v…
ClearlyClaire Jan 5, 2026
d9cd754
Fix heartbeat comment not being its own event (#37389)
ClearlyClaire Jan 6, 2026
fd55390
Increase OCR spec timeout from 10 to 20 seconds to improve CI stabili…
larouxn Jan 6, 2026
7e634ee
New Crowdin Translations (automated) (#37394)
github-actions[bot] Jan 6, 2026
84128e1
Downgrade sidekiq-unique-jobs (#37402)
ClearlyClaire Jan 7, 2026
0b1b98c
Merge commit from fork
ClearlyClaire Jan 7, 2026
0f79e29
Merge commit from fork
ClearlyClaire Jan 7, 2026
9fe14a3
Bump version to v4.5.4 (#37413)
ClearlyClaire Jan 7, 2026
dd26964
Use bundler version 4.0.3 (#37392)
mjankowski Jan 7, 2026
f840d7b
Update dependency sass to v1.97.2 (#37395)
renovate[bot] Jan 7, 2026
bdcdd53
Fix unnecessary downcasing of some words in moderation/settings inter…
ClearlyClaire Jan 7, 2026
aa21100
Fix URI generation for reblogs by accounts with numerical AP ids (#37…
oneiros Jan 7, 2026
f282d5f
Merge remote-tracking branch 'parent/main' into upstream-20260108
kmycode Jan 7, 2026
5f0d341
Merge pull request #1081 from kmycode/upstream-20260108
kmycode Jan 8, 2026
9fdc20e
Merge branch 'kb_development' into kb-draft-22.0
kmycode Jan 8, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,31 @@

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

## [4.5.4] - 2026-01-07

### Security

- Fix SSRF protection bypass ([GHSA](https://github.com/mastodon/mastodon/security/advisories/GHSA-xfrj-c749-jxxq))
- Fix missing ownership check in severed relationships controller ([GHSA](https://github.com/mastodon/mastodon/security/advisories/GHSA-ww85-x9cp-5v24))

### Changed

- Change HTTP Signature verification status from 401 to 503 on temporary failure to get remote actor (#37221 by @ClearlyClaire)

### Fixed

- Fix custom emojis not being rendered in profile fields (#37365 by @ClearlyClaire)
- Fix serialization of context pages (#37376 by @ClearlyClaire)
- Fix quotes with CWs but no text not having fallback link (#37361 by @ClearlyClaire)
- Fix outdated link target for “locked” warning (#37366 by @ClearlyClaire)
- Fix local custom emojis sometimes being rendered in remote posts (#37284 by @ChaosExAnima)
- Fix some assets not being loaded from configured CDN (#37310 by @ChaosExAnima)
- Fix notifications page error in Tor browser (#37285 by @diondiondion)
- Fix custom emojis not being displayed in CWs and fav/boost notifications (#37272 and #37306 by @ChaosExAnima and @ClearlyClaire)
- Fix default `Admin` role not including `view_feeds` permission (#37301 by @ClearlyClaire)
- Fix hashtag autocomplete replacing suggestion's first characters with input (#37281 by @ClearlyClaire)
- Fix mentions of domain-blocked users being processed (#37257 by @ClearlyClaire)

## [4.5.3] - 2025-12-08

### Security
Expand Down
2 changes: 1 addition & 1 deletion Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ gem 'ruby-vips', '~> 2.2', require: false

gem 'active_model_serializers', '~> 0.10'
gem 'addressable', '~> 2.8'
gem 'bootsnap', '~> 1.19.0', require: false
gem 'bootsnap', require: false
gem 'browser'
gem 'charlock_holmes', '~> 0.7.7'
gem 'chewy', '~> 7.3'
Expand Down
58 changes: 30 additions & 28 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ GEM
rexml
base64 (0.3.0)
bcp47_spec (0.2.1)
bcrypt (3.1.20)
bcrypt (3.1.21)
benchmark (0.5.0)
better_errors (2.10.1)
erubi (>= 1.0.0)
Expand All @@ -129,7 +129,7 @@ GEM
binding_of_caller (1.0.1)
debug_inspector (>= 1.2.0)
blurhash (0.1.8)
bootsnap (1.19.0)
bootsnap (1.20.1)
msgpack (~> 1.2)
brakeman (7.1.2)
racc
Expand Down Expand Up @@ -240,15 +240,15 @@ GEM
faraday-net_http (>= 2.0, < 3.5)
json
logger
faraday-follow_redirects (0.4.0)
faraday-follow_redirects (0.5.0)
faraday (>= 1, < 3)
faraday-httpclient (2.0.2)
httpclient (>= 2.2)
faraday-net_http (3.4.2)
net-http (~> 0.5)
fast_blank (1.0.1)
fastimage (2.4.0)
ffi (1.17.2)
ffi (1.17.3)
ffi-compiler (1.3.2)
ffi (>= 1.15.5)
rake
Expand All @@ -271,7 +271,7 @@ GEM
fog-json (>= 1.0)
formatador (1.2.3)
reline
forwardable (1.3.3)
forwardable (1.4.0)
fugit (1.12.1)
et-orbi (~> 1.4)
raabro (~> 1.4)
Expand All @@ -298,7 +298,8 @@ GEM
rubocop (>= 1.0)
sysexits (~> 1.1)
hashdiff (1.2.1)
hashie (5.0.0)
hashie (5.1.0)
logger
hcaptcha (7.1.0)
json
highline (3.1.2)
Expand Down Expand Up @@ -427,7 +428,7 @@ GEM
activesupport (>= 4)
railties (>= 4)
request_store (~> 1.0)
loofah (2.24.1)
loofah (2.25.0)
crass (~> 1.0.2)
nokogiri (>= 1.12.0)
mail (2.9.0)
Expand All @@ -447,13 +448,14 @@ GEM
mime-types-data (3.2025.0924)
mini_mime (1.1.5)
mini_portile2 (2.8.9)
minitest (5.27.0)
minitest (6.0.1)
prism (~> 1.5)
msgpack (1.8.0)
multi_json (1.18.0)
multi_json (1.19.1)
mutex_m (0.3.0)
net-http (0.6.0)
uri
net-imap (0.6.0)
net-imap (0.6.2)
date
net-protocol
net-ldap (0.20.0)
Expand All @@ -466,7 +468,7 @@ GEM
net-smtp (0.5.1)
net-protocol
nio4r (2.7.5)
nokogiri (1.18.10)
nokogiri (1.19.0)
mini_portile2 (~> 2.8.2)
racc (~> 1.4)
oj (3.16.13)
Expand Down Expand Up @@ -591,7 +593,7 @@ GEM
parslet (2.0.0)
pastel (0.8.0)
tty-color (~> 0.5)
pg (1.6.2)
pg (1.6.3)
pghero (3.7.0)
activerecord (>= 7.1)
playwright-ruby-client (1.57.1)
Expand All @@ -609,7 +611,7 @@ GEM
net-smtp
premailer (~> 1.7, >= 1.7.9)
prettyprint (0.2.0)
prism (1.6.0)
prism (1.7.0)
prometheus_exporter (2.3.1)
webrick
propshaft (1.3.1)
Expand All @@ -619,7 +621,7 @@ GEM
psych (5.3.1)
date
stringio
public_suffix (7.0.0)
public_suffix (7.0.2)
puma (7.1.0)
nio4r (~> 2.0)
pundit (2.5.2)
Expand Down Expand Up @@ -696,7 +698,7 @@ GEM
readline (~> 0.0)
rdf-normalize (0.7.0)
rdf (~> 3.3)
rdoc (6.17.0)
rdoc (7.0.3)
erb
psych (>= 4.0.0)
tsort
Expand All @@ -716,7 +718,7 @@ GEM
railties (>= 7.0)
rexml (3.4.4)
rotp (6.3.0)
rouge (4.6.1)
rouge (4.7.0)
rpam2 (4.0.2)
rqrcode (3.1.1)
chunky_png (~> 1.0)
Expand Down Expand Up @@ -761,9 +763,9 @@ GEM
rubocop-ast (>= 1.47.1, < 2.0)
ruby-progressbar (~> 1.7)
unicode-display_width (>= 2.4.0, < 4.0)
rubocop-ast (1.48.0)
rubocop-ast (1.49.0)
parser (>= 3.3.7.2)
prism (~> 1.4)
prism (~> 1.7)
rubocop-capybara (2.22.1)
lint_roller (~> 1.1)
rubocop (~> 1.72, >= 1.72.1)
Expand All @@ -774,7 +776,7 @@ GEM
lint_roller (~> 1.1)
rubocop (>= 1.75.0, < 2.0)
rubocop-ast (>= 1.47.1, < 2.0)
rubocop-rails (2.34.2)
rubocop-rails (2.34.3)
activesupport (>= 4.2.0)
lint_roller (~> 1.1)
rack (>= 1.1)
Expand Down Expand Up @@ -821,13 +823,13 @@ GEM
sidekiq-scheduler (6.0.1)
rufus-scheduler (~> 3.2)
sidekiq (>= 7.3, < 9)
sidekiq-unique-jobs (8.0.12)
sidekiq-unique-jobs (8.0.11)
concurrent-ruby (~> 1.0, >= 1.0.5)
sidekiq (>= 7.0.0, < 9.0.0)
thor (>= 1.0, < 3.0)
simple-navigation (4.4.0)
activesupport (>= 2.3.2)
simple_form (5.4.0)
simple_form (5.4.1)
actionpack (>= 7.0)
activemodel (>= 7.0)
simplecov (0.22.0)
Expand Down Expand Up @@ -860,7 +862,7 @@ GEM
test-prof (1.5.0)
thor (1.4.0)
tilt (2.6.1)
timeout (0.5.0)
timeout (0.6.0)
tpm-key_attestation (0.14.1)
bindata (~> 2.4)
openssl (> 2.0)
Expand Down Expand Up @@ -888,13 +890,13 @@ GEM
unf_ext (0.0.9.1)
unicode-display_width (3.2.0)
unicode-emoji (~> 4.1)
unicode-emoji (4.1.0)
unicode-emoji (4.2.0)
uri (1.1.1)
useragent (0.16.11)
validate_url (1.0.15)
activemodel (>= 3.0.0)
public_suffix
vite_rails (3.0.19)
vite_rails (3.0.20)
railties (>= 5.1, < 9)
vite_ruby (~> 3.0, >= 3.2.2)
vite_ruby (3.9.2)
Expand Down Expand Up @@ -930,7 +932,7 @@ GEM
xorcist (1.1.3)
xpath (3.2.0)
nokogiri (~> 1.8)
zeitwerk (2.7.3)
zeitwerk (2.7.4)

PLATFORMS
ruby
Expand All @@ -944,7 +946,7 @@ DEPENDENCIES
better_errors (~> 2.9)
binding_of_caller (~> 1.0)
blurhash (~> 0.1)
bootsnap (~> 1.19.0)
bootsnap
brakeman (~> 7.0)
browser
bundler-audit (~> 0.9)
Expand Down Expand Up @@ -1091,7 +1093,7 @@ DEPENDENCIES
xorcist (~> 1.1)

RUBY VERSION
ruby 3.4.1p0
ruby 3.4.8

BUNDLED WITH
4.0.2
4.0.3
5 changes: 2 additions & 3 deletions app/controllers/activitypub/contexts_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,8 @@ def set_items

def context_presenter
first_page = ActivityPub::CollectionPresenter.new(
id: items_context_url(@conversation, page_params),
type: :unordered,
part_of: items_context_url(@conversation),
part_of: context_url(@conversation),
next: next_page,
items: @items.map { |status| status.local? ? ActivityPub::TagManager.instance.uri_for(status) : status.uri }
)
Expand All @@ -52,7 +51,7 @@ def items_collection_presenter
page = ActivityPub::CollectionPresenter.new(
id: items_context_url(@conversation, page_params),
type: :unordered,
part_of: items_context_url(@conversation),
part_of: context_url(@conversation),
next: next_page,
items: @items.map { |status| status.local? ? ActivityPub::TagManager.instance.uri_for(status) : status.uri }
)
Expand Down
2 changes: 1 addition & 1 deletion app/controllers/severed_relationships_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ def followers
private

def set_event
@event = AccountRelationshipSeveranceEvent.find(params[:id])
@event = AccountRelationshipSeveranceEvent.where(account: current_account).find(params[:id])
end

def following_data
Expand Down
7 changes: 4 additions & 3 deletions app/javascript/mastodon/components/account_fields.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import CheckIcon from '@/material-icons/400-24px/check.svg?react';
import { Icon } from 'mastodon/components/icon';
import type { Account } from 'mastodon/models/account';

import { CustomEmojiProvider } from './emoji/context';
import { EmojiHTML } from './emoji/html';
import { useElementHandledLink } from './status/handled_link';

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

return (
<CustomEmojiProvider emojis={emojis}>
<>
{fields.map((pair, i) => (
<dl key={i} className={classNames({ verified: pair.verified_at })}>
<EmojiHTML
as='dt'
htmlString={pair.name_emojified}
extraEmojis={emojis}
className='translate'
{...htmlHandlers}
/>
Expand All @@ -52,12 +52,13 @@ export const AccountFields: React.FC<Pick<Account, 'fields' | 'emojis'>> = ({
<EmojiHTML
as='span'
htmlString={pair.value_emojified}
extraEmojis={emojis}
{...htmlHandlers}
/>
</dd>
</dl>
))}
</CustomEmojiProvider>
</>
);
};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ export const Warning = () => {
defaultMessage='Your account is not {locked}. Anyone can follow you to view your follower-only posts.'
values={{
locked: (
<a href='/settings/profile'>
<a href='/settings/privacy#account_unlocked'>
<FormattedMessage
id='compose_form.lock_disclaimer.lock'
defaultMessage='locked'
Expand Down
1 change: 1 addition & 0 deletions app/javascript/mastodon/locales/ca.json
Original file line number Diff line number Diff line change
Expand Up @@ -491,6 +491,7 @@
"keyboard_shortcuts.column": "Centra la columna",
"keyboard_shortcuts.compose": "Centra l'àrea de composició de text",
"keyboard_shortcuts.description": "Descripció",
"keyboard_shortcuts.direct": "Obre la columna de mencions privades",
"keyboard_shortcuts.down": "Abaixa a la llista",
"keyboard_shortcuts.enter": "Obre el tut",
"keyboard_shortcuts.favourite": "Tut afavorit",
Expand Down
1 change: 1 addition & 0 deletions app/javascript/mastodon/locales/cs.json
Original file line number Diff line number Diff line change
Expand Up @@ -517,6 +517,7 @@
"keyboard_shortcuts.column": "Focus na sloupec",
"keyboard_shortcuts.compose": "Zaměřit se na textové pole nového příspěvku",
"keyboard_shortcuts.description": "Popis",
"keyboard_shortcuts.direct": "Otevřít sloupec soukromých zmínek",
"keyboard_shortcuts.down": "Posunout v seznamu dolů",
"keyboard_shortcuts.enter": "Otevřít příspěvek",
"keyboard_shortcuts.favourite": "Oblíbit si příspěvek",
Expand Down
Loading