Rozbitý dotblue/nette-webimages s bezpečností aktualizací Nette

kajinek32
Člen | 31
+
0
-

Ahoj,
jak tu před nějakou dobou proběhla vlna aktualizace všech Nette verzí 2.X a 3.X, která opravovala chybu v Micro presenteru, přestal mi na několika webech fungovat doplněk dotblue/nette-webimages (GitHub).

Doplněk se už nevyvíjí, a mám ho u klientů, kteří nezaplatí větší aktualizaci všech komponent, tak se to snažím hotfixnout.

Řešení a)
upravit si v Nette/Application MicroPresenter.php:71 tak, aby to místo Closure bralo i instanci (nesystémové, možná i bezpečnostně špatné?)
tedy z

if (!$callback instanceof \Closure){

na

if (!$callback instanceof \Closure && !$callback instanceof \DotBlue\WebImages\Route) {

Řešení b)
Nějak upravit dotblue/nette-webimages, aby jeho volání MicroPresenteru bylo instancí Closure?
(tomu nerozumím, jen odhaduju, jestli to nějak takhle nejde)

Řešení c)
Samozřejmě jiný doplněk na zmenšování obrázků on the fly, ale to je opět otázka času předělání v kódu…

Napadá vás, co s tím? :)
Díky za rady.

Felix
Nette Core | 1185
+
0
-

Zkusil bych napsat @VojtěchDobeš. Urcite pujde poslat PR a on by ho jen schvalil.

David Grudl
Nette Core | 8099
+
+3
-

Upravil jsem MicroPresenter tak, aby bral jakýkoliv objekt s metodou __invoke.

(Ten fix s Closure byl především kvůli zmatení posluchačů.)

kajinek32
Člen | 31
+
0
-

David Grudl napsal(a):

Upravil jsem MicroPresenter tak, aby bral jakýkoliv objekt s metodou __invoke.

(Ten fix s Closure byl především kvůli zmatení posluchačů.)

Aha, to je zajímavé, díky.
Ale koukám, že tahle úprava je jen v aktuální verzi, nikoliv v těch legacy (2.4.16), že?…

David Grudl
Nette Core | 8099
+
+1
-

Portnul jsem to do větve 2.4.

kajinek32
Člen | 31
+
0
-

David Grudl napsal(a):

Portnul jsem to do větve 2.4.

Moc díky, hodil jsem si do composeru v2.4.x-dev a už to šlape!

Kori
Člen | 73
+
+2
-

Ad b) Fix je trivialni, resil jsem to na starsich projektech

Uprav si radek 75 v Route.php na

		$defaults['callback'] = \Closure::fromCallable($this);

Edit: Poslal jsem PR

Editoval Kori (8. 11. 2020 7:05)

kajinek32
Člen | 31
+
0
-

Kori napsal(a):

Ad b) Fix je trivialni, resil jsem to na starsich projektech

Uprav si radek 75 v Route.php na

		$defaults['callback'] = \Closure::fromCallable($this);

Edit: Poslal jsem PR

Super, díky. Tam, kde je php 7.1, to využiju…

F.Vesely
Člen | 368
+
0
-

@DavidGrudl Nemela by ta podminka byt if (!is_object($callback) && !is_callable($callback))?

Kdyz tam je if (!is_object($callback) || !is_callable($callback)) a poslu tam callback `[$this, ‚foo‘], tak se to vyhodnoti jako true a vyhodi se vyjimka, protoze to neni objekt.

David Grudl
Nette Core | 8099
+
+1
-

Ano, tak to má být, viz bod a).

kajinek32
Člen | 31
+
0
-

David Grudl napsal(a):

Ano, tak to má být, viz bod a).

No ale v té Tvé opravě je „||“, nikoliv „&&“.

(taky mi to na tom padalo, ale zatím jsem to neřešil :) )

David Grudl
Nette Core | 8099
+
0
-

Co ti na tom padá? Že neprojde [$this, ‚foo‘] je v pořádku, neřešilo se tu, aby tohle prošlo.

kajinek32
Člen | 31
+
0
-

David Grudl napsal(a):

Co ti na tom padá? Že neprojde [$this, ‚foo‘] je v pořádku, neřešilo se tu, aby tohle prošlo.

Tak pardon, mně to projde tou podmínkou a spadlo na řádku 75 a bylo to tím, že jsem opravil jen ten jeden řádek. Už je to ok…

Nicméně to řešení od @Kori funguje na webech od php 7.1 dobře, takže jsem to dál neřešil…

Editoval kajinek32 (11. 11. 2020 12:52)