diff options
-rw-r--r-- | imagecache_auto.admin.inc | 9 | ||||
-rw-r--r-- | imagecache_auto.inc | 21 |
2 files changed, 30 insertions, 0 deletions
diff --git a/imagecache_auto.admin.inc b/imagecache_auto.admin.inc index 4d31bc5..9b8efcb 100644 --- a/imagecache_auto.admin.inc +++ b/imagecache_auto.admin.inc @@ -32,5 +32,14 @@ function imagecache_auto_admin_settings() { '#description' => t('The maximum height an automatically created ImageCache preset can have.'), ); + $form['imagecache_auto_max_presets'] = array( + '#type' => 'textfield', + '#title' => t('Maximum number of presets'), + '#default_value' => variable_get('imagecache_auto_max_presets', '250'), + '#size' => 10, + '#maxlength' => 64, + '#description' => t('The maximum number of total imagecache presets before ImageCache auto refuses to create additional presets. This might prevent abuses from malicious clients.'), + ); + return system_settings_form($form); } diff --git a/imagecache_auto.inc b/imagecache_auto.inc index 3541ba3..1b0fe7d 100644 --- a/imagecache_auto.inc +++ b/imagecache_auto.inc @@ -39,6 +39,14 @@ function imagecache_auto_create_preset($options) { return; } + // Check if maximum number of presets was reached. + $max_presets = (int) variable_get('imagecache_auto_max_presets', '250'); + if (imagecache_auto_count_presets() > $max_presets + 1) { + $message = 'Maximum number of imagecache presets reached. Please consider increasing the max number of presets.'; + watchdog('imagecache_auto', $message, array(), WATCHDOG_ERROR); + return; + } + // Create a preset. $preset = imagecache_preset_save(array('presetname' => $name)); @@ -120,3 +128,16 @@ function imagecache_auto_presets() { return $presets; } + +/** + * Count number of existing imagecache presets. + * + * @return + * Number of existing presets. + */ +function imagecache_auto_count_presets() { + $query = 'SELECT COUNT(presetid) AS count FROM imagecache_preset'; + $result = db_query($query); + $count = db_fetch_object($result); + return $count->count; +} |