[backend/federation] Reject notes with text length > 100k characters

This commit is contained in:
Laura Hausmann 2024-02-06 22:59:50 +01:00
parent 61ba7b543e
commit 88a180666d
No known key found for this signature in database
GPG key ID: D044E84C5BE01605
2 changed files with 8 additions and 2 deletions

View file

@ -12,8 +12,8 @@ using HtmlParser = AngleSharp.Html.Parser.HtmlParser;
namespace Iceshrimp.Backend.Core.Helpers.LibMfm.Conversion;
public static class MfmConverter {
public static async Task<string> FromHtmlAsync(string? html) {
if (html == null) return "";
public static async Task<string?> FromHtmlAsync(string? html) {
if (html == null) return null;
// Ensure compatibility with AP servers that send both <br> as well as newlines
var regex = new Regex(@"<br\s?\/?>\r?\n", RegexOptions.IgnoreCase);

View file

@ -27,6 +27,9 @@ public class NoteService(
public async Task<Note> CreateNoteAsync(User user, Note.NoteVisibility visibility, string? text = null,
string? cw = null, Note? reply = null, Note? renote = null) {
if (text is { Length: > 100000 })
throw GracefulException.UnprocessableEntity("Content cannot be longer than 100.000 characters");
var actor = await userRenderer.RenderAsync(user);
var note = new Note {
@ -97,6 +100,9 @@ public class NoteService(
//TODO: parse to fields for specified visibility & mentions
};
if (dbNote.Text is { Length: > 100000 })
throw GracefulException.UnprocessableEntity("Content cannot be longer than 100.000 characters");
await db.Notes.AddAsync(dbNote);
await db.SaveChangesAsync();
logger.LogDebug("Note {id} created successfully", dbNote.Id);