Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

This is read-string, not read-line. It doesn't mean read a string but to read from a string. It reads the first clojure expression from a string.

It isn't supposed to be safe, though it can be tempting to treat it as though it's safe.

- It's similar to the YAML reader, in that Java objects can be created. See "deftype, defrecord, and constructor calls" here: http://clojure.org/reader

- On the positive side for the clojure reader, it isn't widely described as a serialization format and people are less inclined to use it for user input. This is a pretty important difference.

- On the negative side, you can not only instantiate objects, but you can execute code. This is what the example in the article does. You can disable that by setting read-eval.

- Also on the negative side, it lacks something quite as secure as YAML's safe_load. You can tell it not to evaluate code, but there isn't yet a way to disable instantiating objects.

As puredanger pointed out, EDN is a better alternative that also comes with clojure. It's designed for data. Clojure's code format is a superset of EDN. http://clojure.github.com/clojure/clojure.edn-api.html



Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: