mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-08-11 14:03:21 +03:00
esc_xml был один на две задачи, и в атрибутном контексте применялся текстовый вариант без ". form-compile с choiceParameters, имя которого содержит кавычку, выдавал <app:item name="Отбор.Наименование "кавычка"">: lxml падает с attributes construct error, то есть файл невалиден как XML. Затронуто 9 мест в form-compile и 3 в skd-compile, одинаково в обоих портах. Раундтрип через базу показал границу: в ТЕКСТЕ элемента платформа экранирует только & < > (кавычка и апостроф возвращаются сырыми байт-в-байт), а в ЗНАЧЕНИИ АТРИБУТА пишет " — внутри "..." литеральная кавычка невалидна. Поэтому две функции с говорящими именами, а не одна с флагом: esc_xml — значение атрибута: & < > " esc_xml_text — текст элемента: & < > Заодно закрыто расхождение портов в init-навыках: PY экранировал текст с ", PS1 — через SecurityElement::Escape (ещё и '), а epf-init/erf-init в PS1 не экранировали вовсе, из-за чего амперсанд в синониме давал невалидный XML. Кейсы: form-compile/attr-value-escaping, skd-compile/additional-properties-escaping, cf-init/synonym-escaping — все три проверены негативным прогоном на обоих портах и верификацией снэпшотов на платформе. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
35 lines
1.3 KiB
JSON
35 lines
1.3 KiB
JSON
{
|
|
"name": "Кавычка в значении атрибута экранируется ("), иначе XML невалиден",
|
|
"preRun": [
|
|
{
|
|
"script": "meta-compile/scripts/meta-compile",
|
|
"input": { "type": "DataProcessor", "name": "Экранирование" },
|
|
"args": { "-JsonPath": "{inputFile}", "-OutputDir": "{workDir}" }
|
|
},
|
|
{
|
|
"script": "form-add/scripts/form-add",
|
|
"args": { "-ObjectPath": "{workDir}/DataProcessors/Экранирование.xml", "-FormName": "Форма" }
|
|
}
|
|
],
|
|
"params": { "outputPath": "DataProcessors/Экранирование/Forms/Форма/Ext/Form.xml" },
|
|
"validatePath": "DataProcessors/Экранирование/Forms/Форма/Ext/Form.xml",
|
|
"input": {
|
|
"attributes": [ { "name": "Значение", "type": "String" } ],
|
|
"elements": [
|
|
{
|
|
"input": "Поле",
|
|
"path": "Значение",
|
|
"choiceParameters": [
|
|
{ "name": "Отбор.Наименование \"в кавычках\" & <угол>", "value": "тест" }
|
|
]
|
|
}
|
|
]
|
|
},
|
|
"expect": {
|
|
"fileContains": {
|
|
"file": "DataProcessors/Экранирование/Forms/Форма/Ext/Form.xml",
|
|
"text": "name=\"Отбор.Наименование "в кавычках" & <угол>\""
|
|
}
|
|
}
|
|
}
|