TestIB8x - Безопасный код - Option Explicit
27.12.07
Администрирование - Информационная безопасность
Предварительное решение следующей ситуации: "Мы берём некую "универсальную" экспортную функцию, включаем её в свою конфигурацию и эта функция в качестве побочного эффекта затирает значения наших переменных (уровня приложения, уровня модуля, ...)."
А откуда бы автор этой функции мог догадаться, что мы будем использовать такие же "редкие" идентификаторы как "Валюта", "Индикатор", прочее ... ;-)!?
Желающих приглашаю к обсуждению данного решения, может что важное упущено?
Безопасный код – Option Explicit
Категория: Безопасный код
Название: Option Explicit
GUID: 5c11d53e-1dda-4ccb-9ce2-4ea01a9a142c
Версия: 1 от 26.12.07
Введение
Достаточно распространенной является ситуация, когда некая универсальная функция, объявленная с ключевым параметром Экспорт, в своём теле содержит присваивание неявно объявленных переменных.В этом случае существует вероятность того, что в функции, вызывающей эту универсальную функцию используются переменные с таким же именем, в результате чего, после выполнения универсальной функции, значение такой переменной в вызывающей функции будет изменено.
Пример:
Перем х;
Функция Универсальная() Экспорт
х = 1;
Сообщить("Внутри функции: "+ х);
Возврат "";
КонецФункции
Функция ИспользуетУниверсальную()
х = 6;
Сообщить("До вызова функции: "+ х);
Рез = Универсальная();
Сообщить("После вызова функции: "+ х);
// В этом месте значение х будет равно 1, // а должно быть х = 6
Возврат "";
КонецФункции
Для исключения подобных коллизий необходимо проверить каждую экспортную функцию на предмет полноты блока объявления переменных.
Но, как мы понимаем, это очень тяжелая задача для любой достаточно сложной функции. Поэтому помощь компьютера будет не лишней.
Реализация
При программировании универсальной функции любая внутренняя переменная должна быть объявлена в блоке объявления переменных. Использование переменных уровня приложения, внешнего соединения или модуля желательно свести к минимуму и "всячески документировать".Тестирование
В данной версии документы, переменные общего модуля, модуля внешнего приложения и уровня модуля не отслеживаются как исключения.В ходе теста формируется готовый, предположительно правильный блок объявлений переменных, который можно вставить в тело экспортной функции.
Шаг 1 Проверка общих модулей
Для каждой экспортной функции:
1. Создать список объявленных переменных
2. Найти все переменные из операции присваивание
3. Сформировать, при необходимости правильный блок объявлений переменных
Шаг 2 Проверка модулей объектов и модулей формы
1. Создать список реквизитов объекта
2. Создать список объявленных переменных
3. Создать список переменных модуля
4. Найти все переменные из операции присваивание
5. Сформировать, при необходимости правильный блок объявлений переменных
Вступайте в нашу телеграмм-группу Инфостарт
Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.