A cross-site scripting vulnerability has been discovered affecting Iframe Dialog and Media Embed plugins.
This vulnerability might affect a small percentage of integrators that depend on dynamic editor initialization/destroy mechanism. See GitHub advisory for more details.
Potential breaking changes
In some rare cases, a security release may introduce a breaking change to your application. We have provided configuration options that will help you mitigate any potential issues with the upgrade:
- Starting from version 4.21, the Iframe Dialog plugin applies the
- Starting from version 4.21, the Media Embed plugin regenerates the entire content of the embed widget by default. To change this behavior, configure the
If you choose to change either of the above options, make sure to properly configure Content Security Policy to avoid any potential security issues that may arise from embedding iframe elements on your web page.
You can read more details in the relevant security advisory and contact us if you have more questions.
An upgrade is highly recommended!
#4400: Added the
config.uploadImage_supportedTypesconfiguration option allowing to change the image formats accepted by the Upload Image plugin. Thanks to SilverYoCha!
- #5431: Fixed: No notification is shown when pasting or dropping unsupported image types into the editor.
- #439: Fixed: Incorrect Tab and Shift+Tab navigation for radio buttons inside the dialog.
- #4829: Fixed: Undo reversed entire table content instead of a single cell. Thanks to that fix, multiple changes in a table can be undone one by one.
#5396: Fixed: Event listeners for
hashchangeevents on the
window, added by the Maximize plugin, were not removed when destroying the editor instance.
#5414: Fixed: File and image uploaders based on the Upload Widget plugin and Easy Image plugin didn't fire the
changeevent upon finishing upload, resulting in passing incorrect data in form controls for integration frameworks, like Reactive forms in Angular.
- #698: Fixed: An error was thrown after applying formatting to the widget with inline editable and switching to the source mode. Thanks to Glen!
- #3540: The startup data passed to the widget's command is now used to also populate the widget's template.
#5352: Added the
colorButton_contentsCssconfiguration option allowing to add custom CSS to the Color Button menu content. Thanks to mihilion!
- #5333: Fixed: The original name of the uploaded image is not preserved by the Upload Image plugin if the Clipboard plugin has enabled image handling.
- #2881: Fixed: Changing table headers from "Both" to "First column" in the Table dialog does not change the first column cell correctly.
- #2996: Fixed: Table header "scope" attribute is incorrect for the "Headers: both" option in the Table dialog.
- #4802: Fixed: Tableselection caret moves to the previous cell after tabbing into the next cell and then removing its content.
#5365: Fixed: The value of the
config.baseFloatZIndexconfig variable is incorrectly applied to parent dialog when the child dialog is closed resulting in the dialog overlay covering up the dialog. Thanks to JenoDK!
- #5305: Fixed: Anchor name can invalidly include spaces.
#5084: Added the
config.tabletools_scopedHeadersconfiguration option controlling the behaviour of table headers with and without the
#5219: Added the
config.image2_defaultLockRatioconfiguration option allowing to set the default value of the "Lock ratio" option in the Enhanced Image dialog.
#2008: Extended the Mentions and Emoji plugins with a feature option that adds a space after an accepted autocompletion match. See:
configDefinition.followingSpaceoption for the mentions plugin, and
config.emoji_followingSpaceoption for the emoji plugin.
#5215: Added the
config.coreStyles_toggleSubSupconfiguration option which disallows setting the subscript and superscript on the same element simultaneously using UI buttons. This option is turned off by default.
- #4889: Fixed: Incorrect position of the Table Resize cursor after scrolling the editor horizontally.
#5319: Fixed: Autolink
config.autolink_urlRegexoption produced invalid links when configured directly using the editor instance config. Thanks to Aigars Zeiza!
#4941: Fixed: Some entities got wrongly encoded when using
entities_processNumerical = trueconfiguration option.
- #4931: Fixed: Selecting the whole editor content when there is only a list with an empty element at the end inside and deleting it did not delete all list items.
#5122: Added the ability to provide a list of buttons as an array to the
#2008: Added Autocomplete
followingSpaceoption that finishes an accepted match with a space.
#5125: Fixed: Deleting a widget with disabled autoParagraph by the keyboard
backspacekey removes the editor editable area and crashes the editor.
#5135: Fixed: The
radio.setValuemethods are not chainable as stated in the documentation. Thanks to Jordan Bradford!
- #5085: Fixed: The Language plugin removes the element marking the text in foreign language if said element does not have an information about the text direction.
- #4284: Fixed: Tableselection Merging cells with a rowspan throws an unexpected error and does not create an undo step.
- #5184: Fixed: The Editor Placeholder plugin degrades typing performance.
CKEDITOR.tools#convertToPx()gives invalid results if the helper calculator element was deleted from the DOM.
- #5234: Fixed: Easy Image doesn't allow to upload images files using toolbar button.
- #438: Fixed: It is impossible to navigate to the elementspath from the toolbar by keyboard and vice versa.
dialog.validate#functionsincorrectly composes functions that return an optional error message, like e.g.
dialog.validate.numberdue to unnecessary return type coercion.
- #4473: Fixed: The dialog.validate method does not accept parameter value. The issue originated in dialog.validate.functions method that did not properly propagate parameter value to validator. Affected validators:
- #5147: Fixed: The Accessibility Help dialog does not contain info about focus being moved back to the editing area upon leaving dialogs.
- #5144: Fixed: Menu buttons and panel buttons incorrectly indicate the open status of their associated pop-up menus in the browser's accessibility tree.
#5022: Fixed: Find and Replace does not respond to the
#5184: Added the
config.editorplaceholder_delayconfiguration option allowing to delay placeholder before it is toggled when changing editor content.
#5184: Added the
CKEDITOR.tools#debounce()function allowing to postpone a passed function execution until the given milliseconds have elapsed since the last time it was invoked.