CPalius CMF 2.2.11
Yayın: 2026-09-25 · Kanal: kararlı · Kritik: evet
Bir modülün dosyalarını elle silmek (önce devre dışı bırakmadan) ilgisiz sayfaların çökmesine yol açabiliyordu, ve bir sorgu-bütçesi koruması, koruduğu özellikle hiç ilgisi olmayan sayfalarda tetikleniyordu. İkisi de aynı köke çıktı: birkaç ayrı yer, aynı veriyi güvenli olacak şekilde tasarlanmış tek yol yerine kendi başına okuyordu — bu yüzden birine uygulanan bir düzeltme diğerlerini korumasız bırakıyordu. Bu sürüm ikisini de kapatıyor.
Ne düzeldi
Bir modülün dosyalarını önce devre dışı bırakmadan elle silmek, ilgisiz sayfaların çökmesine yol açabiliyordu. Modül sağlık kontrolü, bir modülün kodunun hâlâ orada olup olmadığını anlamak için PHP'nin class_exists()'ine güveniyordu. Her paketlenmiş sürümün çalıştırdığı composer install --optimize-autoloader altında, class_exists() gerçek dosya sistemini değil, bir kez üretilmiş sabit bir classmap'i okur — bu yüzden dosyalar silindikten çok sonra bile silinen modülün class'ını "var" olarak bildirmeye devam ediyor, ve ancak birisi onu gerçekten kullanmaya çalıştığı anda (o modülün view'larını render eden bir template, başka bir modülün doğrudan referans verdiği bir class) yakalanmadan patlıyordu. Kontrol artık önce dosyanın gerçekten diskte olup olmadığını doğruluyor. Dosyaları elle kaldırılan bir modül artık, bir sonraki hangi sayfaya değdiyse onu çökertmek yerine, diğer bozuk modüller gibi anında ve temiz şekilde karantinaya alınıyor.
Forum modülü, her gönderiyi Importer modülünde yaşayan bir class üzerinden render ediyordu. Forum'un gönderi render yolu, gönderi hiç içe aktarılmamış olsa bile, Importer'ın BBCode-temizleme dönüştürücüsünü her gönderide koşulsuz çağırıyordu — Forum'un kendi manifest'inin hiçbir zaman gerekli olarak listelemediği bir modüle karşı kalıcı, beyan edilmemiş bir çalışma zamanı bağımlılığı (Importer zaten Forum'u bağımlılık olarak beyan ediyor; tersi hiçbir zaman var olmamalıydı). Importer bir şekilde kaldırıldığında forum gönderileri tamamen render edilmez hale geliyordu. Dönüştürücü artık Forum'un kendisinde yaşıyor; Importer, Forum'un kopyasına referans veriyor — Importer'ın kendi manifest'inde zaten beyan edilmiş bağımlılık yönüyle eşleşerek.
Paylaşılan, istek-başına bir sorgu bütçesi, kimsenin daha önce sorup sormadığını kontrol etmeyen kod tarafından harcanıyordu. Yedi ayrı yer — dört AACP panosu widget'ı, her istekte origin cache'i okuyan ve yazan iki listener, ve Varnish yanıt başlığı listener'ı — her biri aynı performans-backend-durum tablosunu, tam olarak bunun için kurulmuş tek istek-kapsamlı sorgu yerine, kendi başına sorguluyordu. Bunlardan birkaçına değen tek bir istekte, birleşik sorgu sayısı, başka yerdeki kontrolsüz lazy-loading'i yakalamak için konmuş güvenlik bütçesini aşabiliyor, ve hata en son çalışan şeyde ortaya çıkıyordu — çoğunlukla origin cache yazımında, sessizce, ziyaretçiye görünen hiçbir hata olmadan. Yedisi de artık istek başına tek bir sorguyu paylaşıyor.
Yükseltme
Şema değişikliği yok. Elle bir işlem gerekmiyor.
Bilinen kısıtlar
Bu sürüm, tek başına, bir modülün zaten silindiği ve eski bir build'in classmap'inin hâlâ yerinde olduğu canlı bir kurulumu onarmaz — o classmap'i yeniden üretmek, ya silinen dosyaları geçici olarak geri koymayı ya da bu güncellemeyi cp-includes/vendor'u değiştiren bir yoldan (elle dosya kopyalamak değil, tam sürüm güncellemesi) uygulamayı gerektirir. Durumunuza özel yükseltme rehberi için bu sürümle birlikte verilen notlara bakın.