Skip to content
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

ImageManipulation::variantParts() throws exceptions for some valid variants #586

Open
2 tasks done
GuySartorelli opened this issue Jan 18, 2024 · 0 comments
Open
2 tasks done

Comments

@GuySartorelli
Copy link
Member

Module version(s) affected

Found in 5.x-dev but presumably has been around since 4.0

Description

The ImageManipulation::variantParts() throws an exception for some valid variants, such as FitMax variants.

This is the case for any variant which has another variant method name as part of it. For example, Fit variants work, but FitMax variants do not.

How to reproduce

The following code will die on line 4 with InvalidArgumentException: Invalid variant name arguments: FitMaxWzEwMCwyMDBd

use SilverStripe\Assets\File;
$imageManip = new File();
$name = $imageManip->variantName('FitMax', '100', '200');
$parts =  $imageManip->variantParts($name);

Possible Solution

Possibly sorting the array of methods in alphabetical descending order before using it in the regex could work, though that feels pretty flaky - and would still potentially incorrectly think a Fit variant is actually a FitMax variant if the base64 component starts with Max (though I'm not sure there's anything we can do about that edge case).

More robust (but more complex - probably just go with the first option) would be to find all combinations of methods like this, and then instead of writing the regex like (Fit|FitMax|AnotherMethod), we'd have (Fit(Max)?)|AnotherMethod)

Additional Context

No response

Validations

  • Check that there isn't already an issue that reports the same bug
  • Double check that your reproduction steps work in a fresh installation of silverstripe/installer (with any code examples you've provided)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant