summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md2
-rw-r--r--packages/backend/src/core/MfmService.ts8
-rw-r--r--packages/backend/src/core/activitypub/ApRequestService.ts4
3 files changed, 10 insertions, 4 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 78b2b3fa4f..3e28c6bf01 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -28,6 +28,8 @@
(Cherry-picked from https://activitypub.software/TransFem-org/Sharkey/-/commit/26e0412fbb91447c37e8fb06ffb0487346063bb8)
- Fix: `Retry-After`ヘッダーが送信されなかった問題を修正
(Cherry-picked from https://activitypub.software/TransFem-org/Sharkey/-/commit/8a982c61c01909e7540ff1be9f019df07c3f0624)
+- Fix: サーバーサイドのDOM解析完了時にリソースを開放するように
+ (Cherry-picked from https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/634)
## 2024.8.0
diff --git a/packages/backend/src/core/MfmService.ts b/packages/backend/src/core/MfmService.ts
index 74536c68f5..d33b228c3d 100644
--- a/packages/backend/src/core/MfmService.ts
+++ b/packages/backend/src/core/MfmService.ts
@@ -239,7 +239,7 @@ export class MfmService {
return null;
}
- const { window } = new Window();
+ const { happyDOM, window } = new Window();
const doc = window.document;
@@ -457,6 +457,10 @@ export class MfmService {
appendChildren(nodes, body);
- return new XMLSerializer().serializeToString(body);
+ const serialized = new XMLSerializer().serializeToString(body);
+
+ happyDOM.close().catch(err => {});
+
+ return serialized;
}
}
diff --git a/packages/backend/src/core/activitypub/ApRequestService.ts b/packages/backend/src/core/activitypub/ApRequestService.ts
index 805280db36..7c78f3319b 100644
--- a/packages/backend/src/core/activitypub/ApRequestService.ts
+++ b/packages/backend/src/core/activitypub/ApRequestService.ts
@@ -207,7 +207,7 @@ export class ApRequestService {
if ((contentType ?? '').split(';')[0].trimEnd().toLowerCase() === 'text/html' && _followAlternate === true) {
const html = await res.text();
- const window = new Window({
+ const { window, happyDOM } = new Window({
settings: {
disableJavaScriptEvaluation: true,
disableJavaScriptFileLoading: true,
@@ -241,7 +241,7 @@ export class ApRequestService {
} catch (e) {
// something went wrong parsing the HTML, ignore the whole thing
} finally {
- window.close();
+ happyDOM.close().catch(err => {});
}
}
//#endregion