-
Notifications
You must be signed in to change notification settings - Fork 530
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Segmentation fault with GD on 1.3.1 #826
Comments
Without more details it's rather hard to see what's going wrong... |
Approve, have same issue |
Confirm a problem |
Without more details have the same issue |
Apache error: End of script output before headers: index.php |
I have the same issue with ver 1.3.1, php ver 7.3, using gd. Doing local development on Windows with symfony cli server. Server crashes when it reaches this: I'm not very skilled at debugging, but the crash seems to occur where \Imagine\Factory\ClassFactoryInterface::createImage() creates a new \Imagine\Gd\Image. Server does not crash with imagine/imagine ver 1.2.4. |
In order to fix this issue, we need to know what's going wrong.
To get the info for points 2., 3., and 4.: if the problem occurs in a web applicationSimply create a sample php file on the server with the following contents: <?php phpinfo(INFO_GENERAL); phpinfo(INFO_MODULES); By visiting the page with the browser:
if the problem occurs in a CLI environment:
|
Crash occurs opening any one of several different jpg image files. php version is 7.3.5 php -m confirms it contains no imagick module |
Same problem for me. Imagine open causes segfault. Tried nginx and apache, both have problem. |
Same answer: in order to fix the issue we need to be able to reproduce it |
@mlocati |
@ovgray the CI tests should already do that |
Have you considered the possibility that your CI tests are using a version of php 7.3 that has an imagick module? When I look at e.g. https://github.com/php-imagine/Imagine/runs/3935559862?check_suite_focus=true, the two php 7.3 versions are labelled "gd-gimagick (Docker)" and "gd-imagick (Docker)". Does that mean the php versions have gimagick and imagick modules, respectively? |
Hi, I've created a repo that allowed me to reproduce this issue: Please let me know if anything is unclear You can also see that if you downgrade to imagine 1.2.x then the segmentation fault does not occur. |
This seems to be a PHP bug to me. I was able to reduce the reproducer down to a single file that still causes the segmentation fault: <?php
function y($x, $y, $z)
{
switch ($a->a()) {
default:
$s = '' . $b;
}
$c = array($b);
switch ($a->a()) {
case A::B:
$e = 0;
$f = 0;
if (!empty($d[''])) {
$e = 0;
} else {
if (!isset($d[''])) {
if (isset($d[''])) {
$d[''] = $d[''];
}
}
if (isset($d[''])) {
$e = a(0, a(0, $d['']));
}
}
case A::B:
if (!isset($d[''])) {
if (isset($d[''])) {
$d[''] = round((0 - $d['']) * 0 * 0);
}
}
if (isset($d[''])) {
if ($d[''] < 0 || $d[''] > 0) {
new Z('');
}
}
if (!isset($d[''])) {
if (isset($d[''])) {
$d[''] = $d[''];
}
}
if (isset($d[''])) {
$g[] = $d[''];
}
break;
case A::B:
if (isset($d[''])) {
$g[] = $d[''];
}
break;
case A::B:
if (!isset($d[''])) {
if (isset($d[''])) {
$d[''] = $d[''];
}
}
if (isset($d[''])) {
if ($d[''] < 0) {
new Z('');
}
$g[] = $d[''];
}
break;
}
}
echo "Success!"; The source of this weird looking function is here: Lines 638 to 735 in 303cf35
PHP Version of the reproducer from @mnocon :
|
Thanks for investigating! What would be the options here? Two things come to my mind:
What do you think? |
It seems an opcache bug in particular: by disabling it we don't have the segfault anymore |
I guess we'd need some help from @cmb69 here... |
Hmm, if there is an OPcache bug in PHP 7.3, it won't be resolved anyway. Does this issue also happen with PHP 8.0? |
It does not happen on PHP 8.0 and 8.1 (on the images that I use):
I've added them to the reproducer, just in case |
PHP 7.3 reached its end of life so you need to get your distro to patch this in their PHP 7.3 package I think. There is also to note that not all 7.3 builds seem to affected by this (see https://3v4l.org/AYCSU for example). Refactoring this function to avoid the error should be possible, as many changes in this method I tested stopped the segmentation fault from appearing. I’m not sure if it is the responsibility of the Imagine project, @mlocati has to decide this I think. |
#828 seems to work just fine |
If someone else can confirm that #828 works, I'll merge it and publish a new release |
Note, though, that 3v4l.org runs with OPcache disabled. |
Hi!
Issue description
Our CI tests started failing yesterday with errors similar to
Failed to load resource: the server responded with a status of 502 (Bad Gateway)
. The logs look like this:It started happening right after 1.3.0/1.3.1 has been released and it disappears when a Composer conflict with imagine/imagine:^1.3.0 is added (see: ezsystems/ezplatform-rest#92 for a failing and passing CI build).
What version of Imagine are you using?
1.3.1
What's the PHP version you are using?
7.3
What's the imaging library you are using [gd/imagick/gmagick/any]?
gd
What's the imaging library configuration
Minimal PHP code to reproduce the error:
I don't have a reproducer yet, I am still gathering more data about this issue - I was not able to reproduce it locally, even when using the same PHP Docker image that we use on CI. I will try to extract the core dump and analyse what's happening there. I wish I had more data, but given that 1.3.x is a fresh release I think it's important to let you know that the behaviour has changed between the 1.2.x and 1.3.x releases.
I will update this issue as soon as I have more information.
The text was updated successfully, but these errors were encountered: