Некоторые основные режимы, такие как SES, вызывают функции, хранящиеся в пользовательских файлах. (См. (ses)Simple Emacs Spreadsheet, для получения дополнительной информации о SES.) Пользовательские файлы иногда имеют плохую родословную — вы можете получить электронную таблицу от человека, которого только что встретили, или получить ее по электронной почте от человека, которого никогда не встречали. Поэтому рискованно вызывать функцию, исходный код которой хранится в пользовательском файле, пока вы не убедитесь в ее безопасности.
Возвращает nil, если form является безопасным выражением Lisp, или возвращает список, описывающий, почему оно может быть небезопасным. Аргумент unsafep-vars — это список символов, известных имеющим временные привязки в этой точке; он в основном используется для внутренних рекурсивных вызовов. Текущий буфер является неявным аргументом, который предоставляет список локальных для буфера привязок.
Будучи быстрым и простым, unsafep выполняет очень легкий анализ и отклоняет многие выражения Lisp, которые на самом деле безопасны. Неизвестно случаев, когда unsafep возвращает nil для небезопасного выражения. Однако безопасное выражение Lisp может вернуть строку с свойством display, содержащую связанное выражение Lisp, которое будет выполнено после вставки строки в буфер. Это связанное выражение может быть вредоносным. Чтобы быть в безопасности, вы должны удалять свойства из всех строк, вычисленных пользовательским кодом, перед их вставкой в буферы.