parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Ответ

serglif 20.10.2004 16:05

В очередной раз приношу свою благодарность вам - человеку которому не лениво нести свет в массы. :) Уже читал в форуме не один ваш подробный пост на тему taint/untaint. Не могу сказать, что теперь смогу объяснить все тонкости другому человеку, но часть этой темы осознал.

Остается не до конца понятым вопрос, который я попытался задать в стартовом посте, но возможно сделал это криво. Попытаюсь переформулировать.

Есть процедура, которая формирует и выдает XML-код. Делает она это следующим образом:
$items[^table::sql{select * from ...}]
$attributes[^items.columns[]]
^items.menu{
 <item ^attributes.menu{$attributes.column = "$items.[$attributes.column]" }>
}
Прошу не пинать за 'select * from', PAF признал, что в случае универсального подхода это лучший вариант - http://www.parser.ru/forum/?id=33228 :)

В записях базы данных присутствуют символы &, которые переходят в значения аттрибутов и очевидно должны быть заменены на &amp; чтобы из полученного текста соорудить xdoc.

Так вот:

1. Если выданный XML-код обрабатывается в процедуре ^postprocess[], в которую он попадает через параметр $body, то эта замена происходит автоматически и насколько я понял по причине того, что xml-код, передаваемый параметром в ^xdoc::create автоматически помечается как ^taint[xml] и с ним производятся соответствующее преобразование.

2. Если передачи в ^postprocess[] не производится и я пытаюсь
создать xdoc непосредственно из результатов работы процедуры - поучаю ошибку из-за незаескейпенных амперсандов.

Вопрос: почему так происходит? Потому ли, что первый вариант попадает под случай:
Само преобразование Parser выполняет позже, при выдаче результата обработки документа пользователю, перед выполнением SQL-запроса или отправкой письма.
а второй вариант нет? Или?