Hotfix: never build WebDAV derivatives during page rendering

This commit is contained in:
Terranom674
2026-08-18 23:16:43 +02:00
parent 907fba8c8f
commit 47182a86a2

View File

@@ -65,7 +65,6 @@ function bratonien_tools_webdav_image_source_info($image_id)
$size = 0; $size = 0;
$etag = ''; $etag = '';
// Metadata is optional. Routing must not depend on the root-owned runtime map.
$state_dir = rtrim((string)($config['state_dir'] ?? ''), '/'); $state_dir = rtrim((string)($config['state_dir'] ?? ''), '/');
if ($state_dir !== '') if ($state_dir !== '')
{ {
@@ -189,19 +188,13 @@ function bratonien_tools_webdav_generate_derivative($params, $src_image)
if (!class_exists('pwg_image')) require_once(PHPWG_ROOT_PATH.'admin/include/image.class.php'); if (!class_exists('pwg_image')) require_once(PHPWG_ROOT_PATH.'admin/include/image.class.php');
$derivative = new DerivativeImage($params, $src_image); $derivative = new DerivativeImage($params, $src_image);
if ($derivative->same_as_source()) if ($derivative->same_as_source()) return true;
{
return true;
}
$target = $derivative->get_path(); $target = $derivative->get_path();
if ($target === '' || strpos($target, PHPWG_ROOT_PATH.PWG_DERIVATIVE_DIR) !== 0) return false; if ($target === '' || strpos($target, PHPWG_ROOT_PATH.PWG_DERIVATIVE_DIR) !== 0) return false;
$preview_mtime = @filemtime($preview) ?: 0; $preview_mtime = @filemtime($preview) ?: 0;
if (is_file($target) && is_readable($target) && (@filemtime($target) ?: 0) >= $preview_mtime) if (is_file($target) && is_readable($target) && (@filemtime($target) ?: 0) >= $preview_mtime) return true;
{
return true;
}
$directory = dirname($target); $directory = dirname($target);
if (!is_dir($directory) && !mkdir($directory, 0755, true) && !is_dir($directory)) return false; if (!is_dir($directory) && !mkdir($directory, 0755, true) && !is_dir($directory)) return false;
@@ -221,10 +214,7 @@ function bratonien_tools_webdav_generate_derivative($params, $src_image)
{ {
$image->resize($scaled_size[0], $scaled_size[1]); $image->resize($scaled_size[0], $scaled_size[1]);
} }
if (!empty($params->sharpen)) if (!empty($params->sharpen)) $image->sharpen($params->sharpen);
{
$image->sharpen($params->sharpen);
}
$image->write($target); $image->write($target);
} }
finally finally
@@ -250,18 +240,8 @@ function bratonien_tools_filter_webdav_derivative_url($url, $params, $src_image,
$info = bratonien_tools_webdav_image_source_info((int)$src_image->id); $info = bratonien_tools_webdav_image_source_info((int)$src_image->id);
if (!$info) return $url; if (!$info) return $url;
try // Never perform image generation in the frontend request. A failed image
{ // backend must not be able to take down the complete Piwigo page.
if (bratonien_tools_webdav_generate_derivative($params, $src_image)) $preview_url = bratonien_tools_webdav_image_url((int)$src_image->id, true);
{ return $preview_url ?: $url;
return $url;
}
}
catch (Throwable $e)
{
error_log('Bratonien WebDAV derivative #'.(int)$src_image->id.': '.$e->getMessage());
}
$webdav_url = bratonien_tools_webdav_image_url((int)$src_image->id, true);
return $webdav_url ?: $url;
} }