Clj-песочница ошибка? - PullRequest
       0

Clj-песочница ошибка?

0 голосов
/ 09 апреля 2011

Я пытаюсь заставить clj-песочницу разрешить def и defn.

У меня не было проблем с получением def работы:

(use 'net.licenser.sandbox
     'net.licenser.sandbox.tester
     'net.licenser.sandbox.matcher) 

(def my-tester
  (extend-tester secure-tester  (whitelist (function-matcher 'def))))
(def my-sandbox
  (stringify-sandbox (new-sandbox :tester my-tester)))

(my-sandbox
  "(def a (clojure.core/fn a ([b] (inc b))))")
(println (my-sandbox "(a 5)"))

Однако, defn доставляет мне проблемы.Похоже, мой код соответствует правилам песочницы, но затем не выполняется во время выполнения:

; (macroexpand '(defn y [z] (inc z)))
(my-sandbox 
  "(def y (.withMeta (clojure.core/fn y ([z] (inc z))) (.meta (var y))))")
; java.lang.SecurityException: Exception in sandboxed code.

Это ошибка или я что-то не так делаю?

1 Ответ

2 голосов
/ 09 апреля 2011

clj-sandbox - глючный беспорядок. Были приняты некоторые дизайнерские решения, которые в конечном итоге оказались плохими идеями.

Алан Маллой и я написали новую библиотеку песочницы под названием clojail , чтобы заменить clj-sandbox в наших собственных проектах. Я не уверен, что есть какие-либо проекты, все еще использующие clj-sandbox в производстве, и он больше не поддерживается.

К сожалению, у clojail нет поддержки def / defn, которая есть у clj-sandbox. Это означает, что вы можете разрешить def / defn, но они вообще не будут помещаться в песочницу. Они могут быть использованы для вытеснения ошибок памяти. http://try -clojure.org такой проблемы нет, потому что она все равно должна иметь свою маленькую песочницу def / defn (которая хранится в cookie) Вы должны иметь возможность в основном копировать / вставлять из версии try-clojure , если вам нужно такое поведение.

В любом случае, я действительно забыл о том, как def / defn ведет себя в clj-sandbox, и, вероятно, поэтому мы еще не добавили его в clojail. Я сделаю это позже и выпишу как можно скорее.

В любом случае, clojail - единственная активно поддерживаемая библиотека для песочницы, о которой я знаю сейчас. Он используется в sexpbot и try-clojure, и у нас есть канал для него и других проектов, связанных с sexpbot, на Freenode. Зайдите в #sexpbot, если вам нужна помощь!

...