powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / LISP, уязвимости
9 сообщений из 34, страница 2 из 2
LISP, уязвимости
    #37934225
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
(потирая руки)
Наконец-то.. Схватка двух Лисп-еров. Ато надоели эти сишники хуже горькой редьки.
...
Рейтинг: 0 / 0
LISP, уязвимости
    #37934234
Фотография k0rvin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Guest_____Не должно быть ошибки выполнения. Должно нормально обработаться, а не упасть.

Да ну? А как оно должно обработаться? Так?

А ты не путаешь
Код: plaintext
1.
#.(progn (format t "Oh, exploitable!~%") '(+ 2 2))
c
Код: plaintext
1.
(progn #.(format t "Oh, exploitable!~%") '(+ 2 2))
?
...
Рейтинг: 0 / 0
LISP, уязвимости
    #37934241
Фотография k0rvin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
k0rvin Так?

FIXED
...
Рейтинг: 0 / 0
LISP, уязвимости
    #37934290
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton (потирая руки)
Наконец-то.. Схватка двух Лисп-еров. Ато надоели эти сишники хуже горькой редьки.Это ещё у MasterZiv-а и у меня запарка на работе, а то был бы целый чемпионат ;)
...
Рейтинг: 0 / 0
LISP, уязвимости
    #37934330
Мифрил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
k0rvin(defparameter *my-readtable* (copy-readtable))

(defun my-sharp-dot-reader (stream &rest _)
(declare (ignore _))
(let ((expr (read stream)))
(list 'quote expr)))

(let ((*readtable* *my-readtable*))
(set-dispatch-macro-character #\# #\. #'my-sharp-dot-reader))

(defun safe-read ()
(let ((*readtable* *my-readtable*))
(read)))

(setf b (safe-read))
(princ b)



ввод:
#.(progn (format t "Oh, exploitable!~%") '(+ 2 2))А как это работает?
...
Рейтинг: 0 / 0
LISP, уязвимости
    #37934354
Фотография k0rvin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МифрилА как это работает?

Что именно?
...
Рейтинг: 0 / 0
LISP, уязвимости
    #37934382
Мифрил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А я только начал изучать лисп и ещё не все понимаю, поэтому хочется понять, как не попасть в подобную ситуацию.
Код с eval и багой read я понимаю. Мне интересен сам алгоритм, как вы закрыли эту багу в read. Что тут вообще происходит. Объясните, как сможите, пожалуйста. Считайте меня коммунистом императивным быдлом.
...
Рейтинг: 0 / 0
LISP, уязвимости
    #37934394
Фотография k0rvin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МифрилА я только начал изучать лисп и ещё не все понимаю, поэтому хочется понять, как не попасть в подобную ситуацию.
Код с eval и багой read я понимаю. Мне интересен сам алгоритм, как вы закрыли эту багу в read. Что тут вообще происходит. Объясните, как сможите, пожалуйста. Считайте меня коммунистом императивным быдлом.

Во-первых это не баг. read делает ровно то, что и должна делать, так как должна делать. Суть в том, что она читает поток символов (character) и преобразует его в S-выражения. Однако с комбинацией символов #. связана функция, которая не просто читает выражение, но и выполняет его (прямо во время чтения программы из файла или другого потока). Эта связь #. и функции хранится в *readtable*, соответственно я просто создал копию этой таблицы и переопределил в ней (копии) эту связь, т.е. в *my-readtable* #. связана уже с другой функцией, которая не выполняет код, а просто возвращает его в виде процитированного (quote) S-выражения. Подмена таблиц осуществляется с помощью динамических переменных (об этом в гугле почитаешь).

Фишка в том, что никто не станет использовать функции eval, compile, read напрямую для обработки текста, введенного пользователем (если только это специально не нужно), поэтому претензии Гостя непонятны.
...
Рейтинг: 0 / 0
LISP, уязвимости
    #37934496
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Код с eval и багой read я понимаю.

Это не бага. Это фича.

Мне интересен сам алгоритм, как вы закрыли
> эту багу в read. Что тут вообще происходит. Объясните, как сможите, пожалуйста.


Ридер в лиспе (коммон) настраивается. есть т.н. reader macro signs, символы
управления ридером. Они составляют стандартную таблицу чтения.
Её можно переопределять.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
9 сообщений из 34, страница 2 из 2
Форумы / Программирование [игнор отключен] [закрыт для гостей] / LISP, уязвимости
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]