-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add possibility to make secure-restricted lambdas
- Loading branch information
Showing
4 changed files
with
108 additions
and
90 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,96 +1,81 @@ | ||
;;;; cl-secure-read tests | ||
;;;; See :licence entry in cl-secure-read.asd for details. | ||
|
||
(defpackage #:cl-secure-read-test | ||
(:use :cl :cl-secure-read :rt)) | ||
(defpackage #:cl-secure-read-tests | ||
(:use :cl :cl-secure-read :fiveam :iterate) | ||
(:export #:run-tests)) | ||
|
||
(in-package cl-secure-read-test) | ||
(in-package cl-secure-read-tests) | ||
|
||
(define-secure-read-from-string strict-safe-reader :fail-value "caboom!") | ||
(def-suite securead) | ||
(in-suite securead) | ||
|
||
(deftest strict.1 | ||
(strict-safe-reader "(+ 1 2 3)") | ||
(+ 1 2 3) 9) | ||
(defun run-tests () | ||
(let ((results (run 'securead))) | ||
(fiveam:explain! results) | ||
(unless (fiveam:results-status results) | ||
(error "Tests failed.")))) | ||
|
||
(deftest strict.2 | ||
(strict-safe-reader "#.(+ 1 2 3)") | ||
"caboom!") | ||
(define-secure-read-from-string strict-safe-reader :fail-value "caboom!") | ||
|
||
(deftest strict.3 | ||
(strict-safe-reader "; this is the comment") | ||
"caboom!") | ||
(defmacro mv-equal (form &rest values) | ||
`(is (equal ',values (multiple-value-list ,form)))) | ||
|
||
(deftest strict.4 | ||
(strict-safe-reader "#(1 2 3)") | ||
"caboom!") | ||
(test strict | ||
(mv-equal (strict-safe-reader "(+ 1 2 3)") (+ 1 2 3) 9) | ||
(mv-equal (strict-safe-reader "#.(+ 1 2 3)") "caboom!") | ||
(mv-equal (strict-safe-reader "; this is the comment") "caboom!") | ||
(mv-equal (strict-safe-reader "#(1 2 3)") "caboom!")) | ||
|
||
(let ((safe-read-from-string-whitelist '(:lists :quotes :allow-read-eval :keep-io-syntax (#\# #\. #\()))) | ||
(define-secure-read-from-string less-strict-safe-reader :fail-value "caboom!")) | ||
|
||
(deftest less-strict.1 | ||
(less-strict-safe-reader "(+ 1 2 3)") | ||
(+ 1 2 3) 9) | ||
|
||
(deftest less-strict.2 | ||
(less-strict-safe-reader "#.(+ 1 2 3)") | ||
6 11) | ||
|
||
(deftest less-strict.2.5 | ||
(let (*read-eval*) | ||
(less-strict-safe-reader "#.(+ 1 2 3)")) | ||
"caboom!") | ||
|
||
(deftest less-strict.3 | ||
(less-strict-safe-reader "; this is the comment") | ||
"caboom!") | ||
|
||
(deftest less-strict.4 | ||
(less-strict-safe-reader "#(1 2 3)") | ||
#(1 2 3) 8) | ||
(defun vector-to-list (vec) | ||
(iter (for elt in-vector vec) | ||
(collect elt))) | ||
|
||
(test less-strict | ||
(mv-equal (less-strict-safe-reader "(+ 1 2 3)") (+ 1 2 3) 9) | ||
(mv-equal (less-strict-safe-reader "#.(+ 1 2 3)") 6 11) | ||
(mv-equal (let (*read-eval*) | ||
(less-strict-safe-reader "#.(+ 1 2 3)")) | ||
"caboom!") | ||
(mv-equal (less-strict-safe-reader "; this is the comment") "caboom!") | ||
(mv-equal (vector-to-list (less-strict-safe-reader "#(1 2 3)")) (1 2 3))) | ||
|
||
;; Here we test the lambda not very thoroughly, since it underlies DEFUN'ed versions anyway, | ||
;; and in a sense is tested there. | ||
(defparameter strict-lambda (secure-read-from-string-lambda strict-safe-reader :fail-value "caboom!")) | ||
|
||
(test strict-lambda | ||
(mv-equal (funcall strict-lambda "(+ 1 2 3)") (+ 1 2 3) 9) | ||
(mv-equal (funcall strict-lambda "#.(+ 1 2 3)") "caboom!") | ||
(mv-equal (funcall strict-lambda "; this is the comment") "caboom!") | ||
(mv-equal (funcall strict-lambda "#(1 2 3)") "caboom!")) | ||
|
||
|
||
;;; Here we test DEFINE-SECURE-READ | ||
;; ;;; Here we test DEFINE-SECURE-READ | ||
|
||
(define-secure-read strict-secure-read :fail-value "caboom!") | ||
|
||
(deftest stream-strict.1 | ||
(strict-secure-read (make-string-input-stream "(+ 1 2 3)")) | ||
(+ 1 2 3)) | ||
|
||
(deftest stream-strict.2 | ||
(strict-secure-read (make-string-input-stream "#.(+ 1 2 3)")) | ||
"caboom!") | ||
|
||
(deftest stream-strict.3 | ||
(strict-secure-read (make-string-input-stream "; this is the comment")) | ||
"caboom!") | ||
|
||
(deftest stream-strict.4 | ||
(strict-secure-read (make-string-input-stream "#(1 2 3)")) | ||
"caboom!") | ||
(test stream-strict | ||
(mv-equal (strict-secure-read (make-string-input-stream "(+ 1 2 3)")) (+ 1 2 3)) | ||
(mv-equal (strict-secure-read (make-string-input-stream "#.(+ 1 2 3)")) "caboom!") | ||
(mv-equal (strict-secure-read (make-string-input-stream "; this is the comment")) "caboom!") | ||
(mv-equal (strict-secure-read (make-string-input-stream "#(1 2 3)")) "caboom!")) | ||
|
||
(let ((safe-read-from-string-whitelist '(:lists :quotes :allow-read-eval :keep-io-syntax (#\# #\. #\()))) | ||
(define-secure-read less-strict-secure-read :fail-value "caboom!")) | ||
|
||
(deftest less-stream-strict.1 | ||
(less-strict-secure-read (make-string-input-stream "(+ 1 2 3)")) | ||
(+ 1 2 3)) | ||
|
||
(deftest less-stream-strict.2 | ||
(less-strict-secure-read (make-string-input-stream "#.(+ 1 2 3)")) | ||
6) | ||
|
||
(deftest less-stream-strict.2.5 | ||
(let (*read-eval*) | ||
(less-strict-secure-read (make-string-input-stream "#.(+ 1 2 3)"))) | ||
"caboom!") | ||
|
||
(deftest less-stream-strict.3 | ||
(less-strict-secure-read (make-string-input-stream "; this is the comment")) | ||
"caboom!") | ||
(test less-stream-strict | ||
(mv-equal (less-strict-secure-read (make-string-input-stream "(+ 1 2 3)")) (+ 1 2 3)) | ||
(mv-equal (less-strict-secure-read (make-string-input-stream "#.(+ 1 2 3)")) 6) | ||
(mv-equal (let (*read-eval*) | ||
(less-strict-secure-read (make-string-input-stream "#.(+ 1 2 3)"))) | ||
"caboom!") | ||
(mv-equal (less-strict-secure-read (make-string-input-stream "; this is the comment")) "caboom!") | ||
(mv-equal (vector-to-list (less-strict-secure-read (make-string-input-stream "#(1 2 3)"))) (1 2 3))) | ||
|
||
(deftest less-stream-strict.4 | ||
(less-strict-secure-read (make-string-input-stream "#(1 2 3)")) | ||
#(1 2 3)) | ||
|
||
|
||
|