You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@answer.apache.org by li...@apache.org on 2026/07/07 08:27:16 UTC

(answer) 02/04: Harden avatar cleanup ownership checks

This is an automated email from the ASF dual-hosted git repository.

LinkinStars pushed a commit to branch fix/2.0.2/user
in repository https://gitbox.apache.org/repos/asf/answer.git

commit 3f30215e716e78cbfc7787d288ff22cef300fed2
Author: LinkinStars <li...@foxmail.com>
AuthorDate: Tue Jul 7 14:33:21 2026 +0800

    Harden avatar cleanup ownership checks
---
 internal/service/content/user_service.go | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/internal/service/content/user_service.go b/internal/service/content/user_service.go
index d0ebe875..c1f800ff 100644
--- a/internal/service/content/user_service.go
+++ b/internal/service/content/user_service.go
@@ -360,7 +360,7 @@ func (us *UserService) UpdateInfo(ctx context.Context, req *schema.UpdateInfoReq
 
 	cond := us.formatUserInfoForUpdateInfo(oldUserInfo, req)
 
-	us.cleanUpRemovedAvatar(ctx, oldUserInfo.Avatar, cond.Avatar)
+	us.cleanUpRemovedAvatar(ctx, req.UserID, oldUserInfo.Avatar, cond.Avatar)
 
 	err = us.userRepo.UpdateInfo(ctx, cond)
 	if err != nil {
@@ -407,6 +407,7 @@ func (us *UserService) validateAvatarInfo(
 
 func (us *UserService) cleanUpRemovedAvatar(
 	ctx context.Context,
+	updatingUserID string,
 	oldAvatarJSON string,
 	newAvatarJSON string,
 ) {
@@ -434,6 +435,13 @@ func (us *UserService) cleanUpRemovedAvatar(
 			log.Warn("no file record found for old avatar url:", oldAvatar.Custom)
 			return
 		}
+		if fileRecord.UserID != updatingUserID || fileRecord.Source != string(plugin.UserAvatar) {
+			log.Warnf(
+				"refuse to clean avatar url %q: file record owner/source mismatch (owner=%s source=%s updating_user=%s)",
+				oldAvatar.Custom, fileRecord.UserID, fileRecord.Source, updatingUserID,
+			)
+			return
+		}
 		if err := us.fileRecordService.DeleteAndMoveFileRecord(ctx, fileRecord); err != nil {
 			log.Error(err)
 		}