Добавлен блок в белый список, но блоки по-прежнему не отображаются (6788)
У меня также есть проблема с пользовательскими блоками на моей домашней странице CMS после 6788. На странице CMS используется слайдер, который находится в списке несовместимых из-за старой конфигурации маршрутизатора. Я использовал supee-6788-набор инструментов:
Я вижу пользовательский блок в таблице permission_block
.
| block_id | block_name | is_allowed |
+----------+----------------------+------------+
| 1 | core/template | 1 |
| 2 | catalog/product_new | 1 |
| 3 | customslider/default | 1 |
В config.xml
используется
<admin>
<routers>
<adminhtml>
<args>
<modules>
<customslideradmin before="Mage_Adminhtml">Custom_Customslider_Adminhtml</customslideradmin>
</modules>
</args>
</adminhtml>
</routers>
Теперь домашняя страница пуста. Когда я удаляю пользовательский ползунок, остальные блоки загружаются нормально. Существует только один контрольный знак для пробела экран, в var/log/exception.log
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax
SELECT `main_table`.* FROM `m_customslider_banner` AS `main_table`
LEFT JOIN `m_customslider_value` AS `status`
ON main_table.banner_id = status.banner_id
AND status.store_id = 2 AND status.attribute_code = 'status'
WHERE (`customslider_id` = '2')
AND (`IF(status`.`value IS NULL, main_table`.`status, status`.`value)` = '0')
AND (`start_time` <= '2015-10-28') AND (`end_time` >= '2015-10-28')
Есть ли другая причина, по которой патч мог вызвать это?
1 answers
Я предполагаю, что модуль customslider использует addFieldToFilter()
способом, несовместимым с патчем APPSEC-1063 , подробно описанным здесь. Я потратил большую часть своего дня на это, и несовместимый код выдает PDOException
. Я использовал сканирование панели инструментов в качестве отправной точки, и это помогает находить код, несовместимый с APPSEC-1063, но он не улавливает все.
Например, SUPEE-6788 изменяет этот основной код Magento из Mage_Eav_Model_Resource_Attribute_Collection
$field = '(CASE WHEN additional_table.is_system = 1 AND additional_table.is_visible = 0 THEN 1 ELSE 0 END)';
return $this->addFieldToFilter($field, 0);
Инструмент сканирования использует регулярное выражение для сопоставления нескольких символов, которые будут бесполезны в той же строке, что и addFieldToFilter
, но в приведенном выше примере, поскольку строка задана как переменная в отдельной строке, она будет пропущена.
В результате мы "исправили исправление" и включили это в наши развертывания исправлений, которые предупредят нас о любом коде, несовместимом с APPSEC-1063, который инструмент не смог обнаружить.
Применение этого исправления к подходящей среде для отладки должно помочь вам увидеть, где проблема в модуле customslider. Magento предложил некоторые рекомендации по ссылке выше о том, как сделать коллекции ресурсов совместимыми.