Skip to content
Snippets Groups Projects
Verified Commit 9b44ffa4 authored by Alex Pott's avatar Alex Pott
Browse files

Revert "Issue #2583041 by mondrake, fietserwin, claudiu.cristea, alexpott,...

Revert "Issue #2583041 by mondrake, fietserwin, claudiu.cristea, alexpott, catch: GD toolkit & operations should catch \Throwable to fail gracefully in case of errors"

This reverts commit 23edd01f.
parent 817c02e8
No related branches found
No related tags found
32 merge requests!7452Issue #1797438. HTML5 validation is preventing form submit and not fully...,!54479.5.x SF update,!5014Issue #3071143: Table Render Array Example Is Incorrect,!4868Issue #1428520: Improve menu parent link selection,!4289Issue #1344552 by marcingy, Niklas Fiekas, Ravi.J, aleevas, Eduardo Morales...,!4114Issue #2707291: Disable body-level scrolling when a dialog is open as a modal,!4100Issue #3249600: Add support for PHP 8.1 Enums as allowed values for list_* data types,!3630Issue #2815301 by Chi, DanielVeza, kostyashupenko, smustgrave: Allow to create...,!3600Issue #3344629: Passing null to parameter #1 ($haystack) of type string is deprecated,!3291Issue #3336463: Rewrite rules for gzipped CSS and JavaScript aggregates never match,!2378Issue #2875033: Optimize joins and table selection in SQL entity query implementation,!2334Issue #3228209: Add hasRole() method to AccountInterface,!2074Issue #2707689: NodeForm::actions() checks for delete access on new entities,!2062Issue #3246454: Add weekly granularity to views date sort,!1591Issue #3199697: Add JSON:API Translation experimental module,!1484Exposed filters get values from URL when Ajax is on,!1255Issue #3238922: Refactor (if feasible) uses of the jQuery serialize function to use vanillaJS,!1162Issue #3100350: Unable to save '/' root path alias,!1105Issue #3025039: New non translatable field on translatable content throws error,!1073issue #3191727: Focus states on mobile second level navigation items fixed,!10223132456: Fix issue where views instances are emptied before an ajax request is complete,!957Added throwing of InvalidPluginDefinitionException from getDefinition().,!925Issue #2339235: Remove taxonomy hard dependency on node module,!877Issue #2708101: Default value for link text is not saved,!872Draft: Issue #3221319: Race condition when creating menu links and editing content deletes menu links,!844Resolve #3036010 "Updaters",!617Issue #3043725: Provide a Entity Handler for user cancelation,!579Issue #2230909: Simple decimals fail to pass validation,!560Move callback classRemove outside of the loop,!555Issue #3202493,!485Sets the autocomplete attribute for username/password input field on login form.,!30Issue #3182188: Updates composer usage to point at ./vendor/bin/composer
...@@ -127,14 +127,8 @@ public function apply($operation, array $arguments = []) { ...@@ -127,14 +127,8 @@ public function apply($operation, array $arguments = []) {
$this->logger->error("The selected image handling toolkit '@toolkit' can not process operation '@operation'.", ['@toolkit' => $this->getPluginId(), '@operation' => $operation]); $this->logger->error("The selected image handling toolkit '@toolkit' can not process operation '@operation'.", ['@toolkit' => $this->getPluginId(), '@operation' => $operation]);
return FALSE; return FALSE;
} }
catch (\Throwable $t) { catch (\InvalidArgumentException $e) {
$this->logger->warning("The image toolkit '@toolkit' failed processing '@operation' for image '@image'. Reported error: @class - @message", [ $this->logger->warning($e->getMessage(), []);
'@toolkit' => $this->getPluginId(),
'@operation' => $operation,
'@image' => $this->getSource(),
'@class' => get_class($t),
'@message' => $t->getMessage(),
]);
return FALSE; return FALSE;
} }
} }
......
...@@ -185,9 +185,6 @@ final public function apply(array $arguments) { ...@@ -185,9 +185,6 @@ final public function apply(array $arguments) {
* *
* @return bool * @return bool
* TRUE if the operation was performed successfully, FALSE otherwise. * TRUE if the operation was performed successfully, FALSE otherwise.
*
* @throws \RuntimeException
* If the operation can not be performed.
*/ */
abstract protected function execute(array $arguments); abstract protected function execute(array $arguments);
......
...@@ -180,54 +180,31 @@ protected function load() { ...@@ -180,54 +180,31 @@ protected function load() {
return FALSE; return FALSE;
} }
// Invalidate the image object and return if there's no function to load the
// image file.
$function = 'imagecreatefrom' . image_type_to_extension($this->getType(), FALSE); $function = 'imagecreatefrom' . image_type_to_extension($this->getType(), FALSE);
if (!function_exists($function)) { if (function_exists($function) && $resource = $function($this->getSource())) {
$this->logger->error("The image toolkit '@toolkit' can not process image '@image'.", [ $this->setResource($resource);
'@toolkit' => $this->getPluginId(), if (imageistruecolor($resource)) {
'@image' => $this->getSource(), return TRUE;
]);
$this->preLoadInfo = NULL;
return FALSE;
}
// Invalidate the image object and return if the load fails.
try {
$resource = $function($this->getSource());
}
catch (\Throwable $t) {
$this->logger->error("The image toolkit '@toolkit' failed loading image '@image'. Reported error: @class - @message", [
'@toolkit' => $this->getPluginId(),
'@image' => $this->getSource(),
'@class' => get_class($t),
'@message' => $t->getMessage(),
]);
$this->preLoadInfo = NULL;
return FALSE;
}
$this->setResource($resource);
if (imageistruecolor($resource)) {
return TRUE;
}
else {
// Convert indexed images to truecolor, copying the image to a new
// truecolor resource, so that filters work correctly and don't result
// in unnecessary dither.
$data = [
'width' => imagesx($resource),
'height' => imagesy($resource),
'extension' => image_type_to_extension($this->getType(), FALSE),
'transparent_color' => $this->getTransparentColor(),
'is_temp' => TRUE,
];
if ($this->apply('create_new', $data)) {
imagecopy($this->getResource(), $resource, 0, 0, 0, 0, imagesx($resource), imagesy($resource));
imagedestroy($resource);
} }
else {
// Convert indexed images to truecolor, copying the image to a new
// truecolor resource, so that filters work correctly and don't result
// in unnecessary dither.
$data = [
'width' => imagesx($resource),
'height' => imagesy($resource),
'extension' => image_type_to_extension($this->getType(), FALSE),
'transparent_color' => $this->getTransparentColor(),
'is_temp' => TRUE,
];
if ($this->apply('create_new', $data)) {
imagecopy($this->getResource(), $resource, 0, 0, 0, 0, imagesx($resource), imagesy($resource));
imagedestroy($resource);
}
}
return (bool) $this->getResource();
} }
return (bool) $this->getResource(); return FALSE;
} }
/** /**
...@@ -259,18 +236,7 @@ public function save($destination) { ...@@ -259,18 +236,7 @@ public function save($destination) {
return FALSE; return FALSE;
} }
if ($this->getType() == IMAGETYPE_JPEG) { if ($this->getType() == IMAGETYPE_JPEG) {
try { $success = $function($this->getResource(), $destination, $this->configFactory->get('system.image.gd')->get('jpeg_quality'));
$success = $function($this->getResource(), $destination, $this->configFactory->get('system.image.gd')->get('jpeg_quality'));
}
catch (\Throwable $t) {
$this->logger->error("The image toolkit '@toolkit' failed saving image '@image'. Reported error: @class - @message", [
'@toolkit' => $this->getPluginId(),
'@image' => $destination,
'@class' => get_class($t),
'@message' => $t->getMessage(),
]);
$success = FALSE;
}
} }
else { else {
// Image types that support alpha need to be saved accordingly. // Image types that support alpha need to be saved accordingly.
...@@ -278,18 +244,7 @@ public function save($destination) { ...@@ -278,18 +244,7 @@ public function save($destination) {
imagealphablending($this->getResource(), FALSE); imagealphablending($this->getResource(), FALSE);
imagesavealpha($this->getResource(), TRUE); imagesavealpha($this->getResource(), TRUE);
} }
try { $success = $function($this->getResource(), $destination);
$success = $function($this->getResource(), $destination);
}
catch (\Throwable $t) {
$this->logger->error("The image toolkit '@toolkit' failed saving image '@image'. Reported error: @class - @message", [
'@toolkit' => $this->getPluginId(),
'@image' => $destination,
'@class' => get_class($t),
'@message' => $t->getMessage(),
]);
$success = FALSE;
}
} }
// Move temporary local file to remote destination. // Move temporary local file to remote destination.
if (isset($permanent_destination) && $success) { if (isset($permanent_destination) && $success) {
......
...@@ -452,39 +452,6 @@ public function testCreateNewFailures(): void { ...@@ -452,39 +452,6 @@ public function testCreateNewFailures(): void {
$this->assertTrue($image->isValid(), 'CreateNew with valid arguments validates the Image.'); $this->assertTrue($image->isValid(), 'CreateNew with valid arguments validates the Image.');
} }
/**
* Tests creation of an image that will exceed the memory limit.
*/
public function testInsufficientMemory(): void {
// ini_get() may return -1 or null for memory_limit to indicate there is no
// limit set. In that case, we need to skip this test.
$size = ini_get('memory_limit');
if (!$size || (int) $size === -1) {
$this->markTestSkipped("There is no memory limit set in the PHP environment.");
}
$image = $this->imageFactory->get('core/tests/fixtures/files/image-test.png');
$oldGdImage = $image->getToolkit()->getResource();
$this->assertFalse($image->createNew(2000000, 2000000));
$newGdImage = $image->getToolkit()->getResource();
// Check that a new resource has not been created, and the old one is still
// valid.
$this->assertEquals($oldGdImage, $newGdImage);
}
/**
* Tests resizing of an image that will exceed the memory available.
*/
public function testInsufficientAvailableMemory(): void {
$image = $this->imageFactory->get('core/tests/fixtures/files/image-test.png');
$memory_in_use = memory_get_usage(TRUE);
ini_set('memory_limit', $memory_in_use + 2048);
$this->assertFalse($image->resize(200000, 200000));
}
/** /**
* Tests for GIF images with transparency. * Tests for GIF images with transparency.
*/ */
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment