Skip to content

Instantly share code, notes, and snippets.

@devn
Created November 9, 2012 20:11
Show Gist options
  • Select an option

  • Save devn/4047927 to your computer and use it in GitHub Desktop.

Select an option

Save devn/4047927 to your computer and use it in GitHub Desktop.
Clojail changes
(ns getclojure.jail
(:require [clojail.core :as jail]
[clojail.testers :as tester]
[clojure.stacktrace :as trace])
(:import [java.io StringWriter PushbackReader FileReader]
java.util.concurrent.TimeoutException))
(defn truncate [x]
(if string?
(let [out (apply str (take 400 x))]
(if (> (count x) 400)
(pr-str (str out "..."))
(pr-str out)))
(pr-str x)))
;; (defn force-lazy-seq [s]
;; (or (and (instance? clojure.lang.LazySeq s) (doall s)) s))
(def ^{:private true} getclojure-tester
[tester/secure-tester
(tester/blacklist-symbols '#{print-method})
(tester/blacklist-packages ["java.util.regex.Pattern"])])
(def sandbox (jail/sandbox getclojure-tester :transform truncate))
(defn capture-sexp
[sexp]
(with-open [writer (StringWriter.)]
(binding [*print-length* 5
*print-level* 10]
(let [bindings {#'*out* writer}
e (jail/safe-read sexp)
v (sandbox e bindings)
o (str writer)]
{:input sexp
:value v
:output o}))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment