Добавлен блок в белый список, но блоки по-прежнему не отображаются (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') 

Есть ли другая причина, по которой патч мог вызвать это?

Author: Michael, 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 предложил некоторые рекомендации по ссылке выше о том, как сделать коллекции ресурсов совместимыми.

 4
Author: mpchadwick, 2015-10-29 02:14:39