Bisakah seseorang menjelaskan, untuk apa Kode berikut diperkenalkan antara Magento CE 1.9.1.0 dan 1.9.2.0?
class Varien_Image_Adapter_Gd2:
public function __construct()
{
// Initialize shutdown function
register_shutdown_function(array($this, 'destruct'));
}
/**
* Destroy object image on shutdown
*/
public function destruct()
{
@imagedestroy($this->_imageHandler);
}
Setelah kedua fungsi tersebut ditambahkan, impor gambar galeri produk kami dengan antarmuka ImportExport berhenti berfungsi. Kesalahan ini disebabkan oleh batas memori (yang keluar menjadi batas ukuran file maks terbuka).
Ide saya adalah, bahwa file yang dibuka oleh impor tidak akan ditutup dengan benar.
Saya juga melihat bahwa ada beberapa destruct()
fungsi kosong yang diperkenalkan ( Mage_ImportExport_Model_Import_Adapter_Abstract
) - tetapi memperluasnya agar sesuai dengan logika induk tidak membantu.
sumber
Memiliki masalah yang sama dengan Magento 1.9.2.0 saya ...
Saya hanya mendapatkan ini untuk bekerja dengan mengubah Varien_Image_Adapter_Gd2 di
/lib/Varien/Image/Adapter/Gd2.php
sebagai berikut:Saya telah mengatur memory_limit kembali ke 1G (sebelumnya saya menaikkan hingga 32GB) dan sekarang berfungsi ...
Proyek ini mengimplementasikan prosedur tersebut dengan cara yang ramah dan bersahabat. Cukup pasang dengan komposer dan Anda siap melakukannya.
sumber
Itu adalah bagian dari memperbaiki masalah keamanan dengan unserialize. Metode ajaib seperti __destruct memiliki masalah inheren dengan serialisasi.
Kami telah melihat eksploit yang diusulkan yang menggunakan serialisasi dan __destruct untuk membuat file dalam sistem file - dan perubahan ini (Anda akan melihat lebih banyak perubahan serupa di tempat lain) dilakukan untuk menghindari hal ini.
Apakah ini menyebabkan kebocoran memori atau hanya menggunakan lebih banyak memori hingga skrip selesai?
/security/77549/is-php-unserialize-exploitable-without-any- Interesting-methods
sumber
Jadi saya memang meningkatkan bug dengan Magento termasuk "solusi" yang harus berurusan dengan masalah penggunaan memori dalam proses impor gambar.
Solusinya dapat ditemukan di github di bawah https://github.com/sitewards/import_image_memory_leak_fix tetapi ide dasarnya adalah.
Memperbaiki
Mage_Catalog_Helper_Image::validateUploadFile
untuk benar-benar memanggildestruct
metode pada prosesor gambar. Sayangnya sepertinya defaultVarien_Image
tidak berurusan dengandestruct
jadi kami harus menambahkan kelas kami sendiri yang tidak.Dan kemudian menulis ulang pembantu.
Dan fungsi baru memanggil kelas gambar baru yang dapat dirusak.
sumber