mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-11-03 08:02:36 +09:00 
			
		
		
		
	Fix delete user missed some comments (#21067)
There is a mistake in the batched delete comments part of DeleteUser which causes some comments to not be deleted
The code incorrectly updates the `start` of the limit clause resulting in most comments not being deleted.
```go
			if err = e.Where("type=? AND poster_id=?", issues_model.CommentTypeComment, u.ID).Limit(batchSize, start).Find(&comments); err != nil {
```
should be:
```go
			if err = e.Where("type=? AND poster_id=?", issues_model.CommentTypeComment, u.ID).Limit(batchSize, 0).Find(&comments); err != nil {
```
Co-authored-by: zeripath <art27@cantab.net>
			
			
This commit is contained in:
		@@ -102,9 +102,9 @@ func DeleteUser(ctx context.Context, u *user_model.User, purge bool) (err error)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		// Delete Comments
 | 
							// Delete Comments
 | 
				
			||||||
		const batchSize = 50
 | 
							const batchSize = 50
 | 
				
			||||||
		for start := 0; ; start += batchSize {
 | 
							for {
 | 
				
			||||||
			comments := make([]*issues_model.Comment, 0, batchSize)
 | 
								comments := make([]*issues_model.Comment, 0, batchSize)
 | 
				
			||||||
			if err = e.Where("type=? AND poster_id=?", issues_model.CommentTypeComment, u.ID).Limit(batchSize, start).Find(&comments); err != nil {
 | 
								if err = e.Where("type=? AND poster_id=?", issues_model.CommentTypeComment, u.ID).Limit(batchSize, 0).Find(&comments); err != nil {
 | 
				
			||||||
				return err
 | 
									return err
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			if len(comments) == 0 {
 | 
								if len(comments) == 0 {
 | 
				
			||||||
@@ -202,7 +202,7 @@ func DeleteUser(ctx context.Context, u *user_model.User, purge bool) (err error)
 | 
				
			|||||||
	// ***** END: ExternalLoginUser *****
 | 
						// ***** END: ExternalLoginUser *****
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if _, err = e.ID(u.ID).Delete(new(user_model.User)); err != nil {
 | 
						if _, err = e.ID(u.ID).Delete(new(user_model.User)); err != nil {
 | 
				
			||||||
		return fmt.Errorf("Delete: %v", err)
 | 
							return fmt.Errorf("delete: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user