From baa615a0d1b2b6801eefa8a0dd8676fe1ade8e0c Mon Sep 17 00:00:00 2001 From: Dmitry Verkhoturov Date: Tue, 10 Feb 2026 23:51:01 +0000 Subject: [PATCH 1/3] Fix NOTIFY_EMAIL_FROM plus sign encoding in mailto URLs URL-encode e.From in mailto query parameters so that + characters are preserved instead of being decoded as spaces. Fixes #1946 --- backend/app/notify/email.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/app/notify/email.go b/backend/app/notify/email.go index f72c6b56..6238e09f 100644 --- a/backend/app/notify/email.go +++ b/backend/app/notify/email.go @@ -168,7 +168,7 @@ func (e *Email) buildAndSendMessage(ctx context.Context, req Request, email stri ctx, fmt.Sprintf("mailto:%s?from=%s&unsubscribeLink=%s&subject=%s", email, - e.From, + url.QueryEscape(e.From), url.QueryEscape(msg.unsubscribeLink), url.QueryEscape(msg.subject), ), @@ -203,7 +203,7 @@ func (e *Email) SendVerification(ctx context.Context, req VerificationRequest) e ctx, fmt.Sprintf("mailto:%s?from=%s&subject=%s", req.Email, - e.From, + url.QueryEscape(e.From), url.QueryEscape(e.VerificationSubject), ), msg, From 79177e52f9b9eab94385e021e42a18f8aa9225cf Mon Sep 17 00:00:00 2001 From: Dmitry Verkhoturov Date: Tue, 10 Feb 2026 23:51:08 +0000 Subject: [PATCH 2/3] Fix 100% CPU when EDIT_TIME=0 in image cleanup When EditDuration is zero or negative, cleanupTTL becomes zero, causing time.After(0) to fire immediately in a tight loop. Block on ctx.Done() instead when edit duration is disabled. Fixes #1991 --- backend/app/store/image/image.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/backend/app/store/image/image.go b/backend/app/store/image/image.go index 6339d8e1..2bfea93b 100644 --- a/backend/app/store/image/image.go +++ b/backend/app/store/image/image.go @@ -154,6 +154,12 @@ func (s *Service) ExtractNonProxiedPictures(commentHTML string) (ids []string) { // Cleanup runs periodic cleanup with 1.5*ServiceParams.EditDuration. Blocking loop, should be called inside of goroutine by consumer func (s *Service) Cleanup(ctx context.Context) { + if s.EditDuration <= 0 { + log.Printf("[INFO] pictures cleanup disabled, edit duration is %v", s.EditDuration) + <-ctx.Done() + return + } + cleanupTTL := s.EditDuration * 15 / 10 // cleanup images older than 1.5 * EditDuration log.Printf("[INFO] start pictures cleanup, staging ttl=%v", cleanupTTL) From 3c2679a1d574a439031d51e9f994656540225159 Mon Sep 17 00:00:00 2001 From: Dmitry Verkhoturov Date: Tue, 10 Feb 2026 23:51:14 +0000 Subject: [PATCH 3/3] Fix hardcoded /web paths in demo template Use REMARK_URL template variable for widget links so demo page works with non-root path prefixes. Fixes #1996 --- frontend/apps/remark42/templates/demo.ejs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/frontend/apps/remark42/templates/demo.ejs b/frontend/apps/remark42/templates/demo.ejs index 09d43709..2c3f8730 100644 --- a/frontend/apps/remark42/templates/demo.ejs +++ b/frontend/apps/remark42/templates/demo.ejs @@ -72,11 +72,11 @@