diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1d53e4c1fad2..03dd1407bcb6 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -8,7 +8,7 @@
- 自動でバックアップされるように
### Server
--
+- Fix: プロフィール追加情報で無効なURLに入力された場合に照会エラーを出るのを修正
## 2025.3.1
diff --git a/packages/backend/src/core/activitypub/ApRendererService.ts b/packages/backend/src/core/activitypub/ApRendererService.ts
index 83a095cdea17..f01874952fae 100644
--- a/packages/backend/src/core/activitypub/ApRendererService.ts
+++ b/packages/backend/src/core/activitypub/ApRendererService.ts
@@ -499,11 +499,28 @@ export class ApRendererService {
this.userProfilesRepository.findOneByOrFail({ userId: user.id }),
]);
+ const tryRewriteUrl = (maybeUrl: string) => {
+ const urlSafeRegex = /^(?:http[s]?:\/\/.)?(?:www\.)?[-a-zA-Z0-9@%._\+~#=]{2,256}\.[a-z]{2,6}\b(?:[-a-zA-Z0-9@:%_\+.~#?&\/\/=]*)/;
+ try {
+ const match = maybeUrl.match(urlSafeRegex);
+ if (!match) {
+ return maybeUrl;
+ }
+ const urlPart = match[0];
+ const urlPartParsed = new URL(urlPart);
+ const restPart = maybeUrl.slice(match[0].length);
+
+ return `${urlPart}${restPart}`;
+ } catch (e) {
+ return maybeUrl;
+ }
+ };
+
const attachment = profile.fields.map(field => ({
type: 'PropertyValue',
name: field.name,
value: (field.value.startsWith('http://') || field.value.startsWith('https://'))
- ? `${new URL(field.value).href}`
+ ? tryRewriteUrl(field.value)
: field.value,
}));