Index: modules/filter/filter.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/filter/filter.module,v
retrieving revision 1.300
diff -u -p -r1.300 filter.module
--- modules/filter/filter.module	23 Oct 2009 22:24:14 -0000	1.300
+++ modules/filter/filter.module	7 Nov 2009 07:01:37 -0000
@@ -513,37 +513,49 @@ function filter_format_allowcache($forma
  *   An array of filter objects assosiated to the given format.
  */
 function filter_list_format($format_id) {
-  $filters = &drupal_static(__FUNCTION__, array());
+  $filters = &drupal_static(__FUNCTION__);
   $filter_info = filter_get_filters();
 
-  if (!isset($filters[$format_id])) {
-    $format_filters = array();
-    $query = db_select('filter', 'filter')
-      ->fields('filter')
-      ->condition('format', $format_id)
-      ->orderBy('weight')
-      ->orderBy('module')
-      ->orderBy('name');
-    $result = $query->execute()->fetchAllAssoc('name');
-    foreach ($result as $name => $filter) {
-      if (isset($filter_info[$name])) {
-        $filter->title = $filter_info[$name]['title'];
-        // Unpack stored filter settings.
-        $filter->settings = (isset($filter->settings) ? unserialize($filter->settings) : array());
-        // Apply default filter settings.
-        if (isset($filter_info[$name]['default settings'])) {
-          $filter->settings = array_merge($filter_info[$name]['default settings'], $filter->settings);
+  if (!isset($filters)) {
+    foreach (filter_build_list() as $id => $format) {
+      foreach ($format as $name => $filter) {
+        if (isset($filter_info[$name])) {
+          $filter->title = $filter_info[$name]['title'];
+          // Unpack stored filter settings.
+          $filter->settings = (isset($filter->settings) ? unserialize($filter->settings) : array());
+          // Apply default filter settings.
+          if (isset($filter_info[$name]['default settings'])) {
+            $filter->settings = array_merge($filter_info[$name]['default settings'], $filter->settings);
+          }
+          $format_filters[$name] = $filter;
         }
-        $format_filters[$name] = $filter;
+        $filters[$id] = $format_filters;
       }
     }
-    $filters[$format_id] = $format_filters;
   }
 
   return isset($filters[$format_id]) ? $filters[$format_id] : array();
 }
 
 /**
+ * Build filters for all formats.
+ *
+ * @return
+ *   An associative array of filters, keyed by format ID.
+ *
+ * @see filter_list_format()
+ */
+function filter_build_list() {
+  $filters = array();
+  $result = db_query('SELECT * FROM {filter} ORDER BY weight, module, name');
+  foreach ($result as $record) {
+    $filters[$record->format][$record->name] = $record;
+  }
+  return $filters;
+}
+
+
+/**
  * Run all the enabled filters on a piece of text.
  *
  * Note: Because filters can inject JavaScript or execute PHP code, security is
