|
|
|
LISP, уязвимости
|
|||
|---|---|---|---|
|
#18+
(потирая руки) Наконец-то.. Схватка двух Лисп-еров. Ато надоели эти сишники хуже горькой редьки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2012, 18:22 |
|
||
|
LISP, уязвимости
|
|||
|---|---|---|---|
|
#18+
_Guest_____Не должно быть ошибки выполнения. Должно нормально обработаться, а не упасть. Да ну? А как оно должно обработаться? Так? А ты не путаешь Код: plaintext 1. Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2012, 18:28 |
|
||
|
LISP, уязвимости
|
|||
|---|---|---|---|
|
#18+
mayton (потирая руки) Наконец-то.. Схватка двух Лисп-еров. Ато надоели эти сишники хуже горькой редьки.Это ещё у MasterZiv-а и у меня запарка на работе, а то был бы целый чемпионат ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2012, 19:14 |
|
||
|
LISP, уязвимости
|
|||
|---|---|---|---|
|
#18+
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))А как это работает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2012, 20:05 |
|
||
|
LISP, уязвимости
|
|||
|---|---|---|---|
|
#18+
МифрилА как это работает? Что именно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2012, 20:22 |
|
||
|
LISP, уязвимости
|
|||
|---|---|---|---|
|
#18+
А я только начал изучать лисп и ещё не все понимаю, поэтому хочется понять, как не попасть в подобную ситуацию. Код с eval и багой read я понимаю. Мне интересен сам алгоритм, как вы закрыли эту багу в read. Что тут вообще происходит. Объясните, как сможите, пожалуйста. Считайте меня коммунистом императивным быдлом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2012, 20:47 |
|
||
|
LISP, уязвимости
|
|||
|---|---|---|---|
|
#18+
МифрилА я только начал изучать лисп и ещё не все понимаю, поэтому хочется понять, как не попасть в подобную ситуацию. Код с eval и багой read я понимаю. Мне интересен сам алгоритм, как вы закрыли эту багу в read. Что тут вообще происходит. Объясните, как сможите, пожалуйста. Считайте меня коммунистом императивным быдлом. Во-первых это не баг. read делает ровно то, что и должна делать, так как должна делать. Суть в том, что она читает поток символов (character) и преобразует его в S-выражения. Однако с комбинацией символов #. связана функция, которая не просто читает выражение, но и выполняет его (прямо во время чтения программы из файла или другого потока). Эта связь #. и функции хранится в *readtable*, соответственно я просто создал копию этой таблицы и переопределил в ней (копии) эту связь, т.е. в *my-readtable* #. связана уже с другой функцией, которая не выполняет код, а просто возвращает его в виде процитированного (quote) S-выражения. Подмена таблиц осуществляется с помощью динамических переменных (об этом в гугле почитаешь). Фишка в том, что никто не станет использовать функции eval, compile, read напрямую для обработки текста, введенного пользователем (если только это специально не нужно), поэтому претензии Гостя непонятны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2012, 21:00 |
|
||
|
LISP, уязвимости
|
|||
|---|---|---|---|
|
#18+
> Код с eval и багой read я понимаю. Это не бага. Это фича. Мне интересен сам алгоритм, как вы закрыли > эту багу в read. Что тут вообще происходит. Объясните, как сможите, пожалуйста. Ридер в лиспе (коммон) настраивается. есть т.н. reader macro signs, символы управления ридером. Они составляют стандартную таблицу чтения. Её можно переопределять. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2012, 23:21 |
|
||
|
|

start [/forum/topic.php?fid=16&gotonew=1&tid=1342153]: |
0ms |
get settings: |
14ms |
get forum list: |
20ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
62ms |
get topic data: |
11ms |
get first new msg: |
7ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
2ms |
| others: | 281ms |
| total: | 467ms |

| 0 / 0 |
