From 85ac46945871a635b2bd4d7a1039a9950edad3e2 Mon Sep 17 00:00:00 2001 From: Richard Stanway Date: Sun, 16 Jan 2022 18:33:10 +0100 Subject: [PATCH] UI: Use regexp to filter filename formatting Avoids unbounded stack growth when pasting content that has many invalid characters. Fixes https://github.com/obsproject/obs-studio/issues/5815. --- UI/window-basic-settings.cpp | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/UI/window-basic-settings.cpp b/UI/window-basic-settings.cpp index 27a65fc3e..b5d4be7ee 100644 --- a/UI/window-basic-settings.cpp +++ b/UI/window-basic-settings.cpp @@ -4031,17 +4031,18 @@ bool OBSBasicSettings::AskIfCanCloseSettings() void OBSBasicSettings::on_filenameFormatting_textEdited(const QString &text) { + QString safeStr = text; + #ifdef __APPLE__ - size_t invalidLocation = text.toStdString().find_first_of(":"); -#elif _WIN32 - size_t invalidLocation = text.toStdString().find_first_of("<>:\"|?*"); + safeStr.replace(QRegularExpression("[:]"), ""); +#elif defined(_WIN32) + safeStr.replace(QRegularExpression("[<>:\"\\|\\?\\*]"), ""); #else - size_t invalidLocation = string::npos; - UNUSED_PARAMETER(text); + // TODO: Add filtering for other platforms #endif - if (invalidLocation != string::npos) - ui->filenameFormatting->backspace(); + if (text != safeStr) + ui->filenameFormatting->setText(safeStr); } void OBSBasicSettings::on_outputResolution_editTextChanged(const QString &text)