diff --git a/core/modules/filter/lib/Drupal/filter/FilterBag.php b/core/modules/filter/lib/Drupal/filter/FilterBag.php
index 599625c..b670509 100644
--- a/core/modules/filter/lib/Drupal/filter/FilterBag.php
+++ b/core/modules/filter/lib/Drupal/filter/FilterBag.php
@@ -115,4 +115,18 @@ public function sortHelper($aID, $bID) {
     return parent::sortHelper($aID, $bID);
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function current() {
+    try {
+      $return = parent::current();
+    }
+    catch (PluginException $e) {
+      $return = $this->get('filter_null');
+      $return->status = 1;
+    }
+    return $return;
+  }
+
 }
diff --git a/core/modules/filter/lib/Drupal/filter/Plugin/Filter/FilterNull.php b/core/modules/filter/lib/Drupal/filter/Plugin/Filter/FilterNull.php
new file mode 100644
index 0000000..b2b2d24
--- /dev/null
+++ b/core/modules/filter/lib/Drupal/filter/Plugin/Filter/FilterNull.php
@@ -0,0 +1,49 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\filter\Plugin\Filter\FilterNull.
+ */
+
+namespace Drupal\filter\Plugin\Filter;
+
+use Drupal\filter\Annotation\Filter;
+use Drupal\Core\Annotation\Translation;
+use Drupal\filter\Plugin\FilterBase;
+
+/**
+ * Provides a filter to display any HTML as plain text.
+ *
+ * @Filter(
+ *   id = "filter_null",
+ *   module = "filter",
+ *   title = @Translation("Returns the empty string"),
+ *   type = FILTER_TYPE_HTML_RESTRICTOR,
+ *   weight = -10
+ * )
+ */
+class FilterNull extends FilterBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function process($text, $langcode, $cache, $cache_id) {
+    return '';
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getHTMLRestrictions() {
+    // Nothing is allowed.
+    return array('allowed' => array());
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function tips($long = FALSE) {
+    return t('No HTML tags allowed.');
+  }
+
+}
diff --git a/core/modules/system/lib/Drupal/system/Tests/Upgrade/FilterFormatUpgradePathTest.php b/core/modules/system/lib/Drupal/system/Tests/Upgrade/FilterFormatUpgradePathTest.php
index 1a42c7f..bf2e13c 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Upgrade/FilterFormatUpgradePathTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Upgrade/FilterFormatUpgradePathTest.php
@@ -73,6 +73,22 @@ public function testFilterFormatUpgrade() {
     // Check that role 5 cannot access to the defined text formats
     $this->assertNoFieldChecked('edit-5-use-text-format-format-one', 'Use text format format_one permission for role is set correctly.');
     $this->assertNoFieldChecked('edit-5-use-text-format-format-two', 'Use text format format_two permission for role is set correctly.');
+
+    // Check that missing
+    $two = filter_format_load('format_two');
+    $this->assertTrue($two->filters()->has('missing_filter'));
+
+    // Try to use a filter format with a missing filter, this should not throw
+    // an exception.
+    check_markup($this->randomName(), 'format_two');
+
+    // Editing and saving the format should drop the missing filter.
+    $this->drupalGet('admin/config/content/formats/format_two');
+    $this->drupalPost(NULL, array(), t('Save configuration'));
+    drupal_static_reset('filter_formats');
+    $two = filter_format_load('format_two');
+    $this->assertFalse($two->filters()->has('missing_filter'));
+
   }
 
 }
diff --git a/core/modules/system/tests/upgrade/drupal-7.filter_formats.database.php b/core/modules/system/tests/upgrade/drupal-7.filter_formats.database.php
index 402670c..dc64b28 100644
--- a/core/modules/system/tests/upgrade/drupal-7.filter_formats.database.php
+++ b/core/modules/system/tests/upgrade/drupal-7.filter_formats.database.php
@@ -132,6 +132,14 @@
   'status' => '1',
   'settings' => 'a:1:{s:17:"filter_url_length";s:2:"72";}',
 ))
+->values(array(
+  'format' => 'format_two',
+  'module' => 'missing_module',
+  'name' => 'missing_filter',
+  'weight' => '0',
+  'status' => '1',
+  'settings' => 'a:0:{}',
+))
 ->execute();
 
 // Define which roles can use the text formats.
