changeset 698: | 96958d3eb5b0 |
parent: | 74e563ed4537 |
author: | Richard Westhaver <ellis@rwest.io> |
date: | Fri, 04 Oct 2024 22:04:59 -0400 |
permissions: | -rw-r--r-- |
description: | fixes |
635
849f72b72b41
add back fuzz.lisp and proper codegen for parquet.json thrift definitions
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
1 | ;;; fuzz.lisp --- RT Fuzz |
849f72b72b41
add back fuzz.lisp and proper codegen for parquet.json thrift definitions
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
2 | |
849f72b72b41
add back fuzz.lisp and proper codegen for parquet.json thrift definitions
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
3 | ;; FUZZER API |
849f72b72b41
add back fuzz.lisp and proper codegen for parquet.json thrift definitions
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
4 | |
849f72b72b41
add back fuzz.lisp and proper codegen for parquet.json thrift definitions
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
5 | ;;; Commentary: |
849f72b72b41
add back fuzz.lisp and proper codegen for parquet.json thrift definitions
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
6 | |
849f72b72b41
add back fuzz.lisp and proper codegen for parquet.json thrift definitions
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
7 | ;; |
849f72b72b41
add back fuzz.lisp and proper codegen for parquet.json thrift definitions
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
8 | ;; wiki: https://en.wikipedia.org/wiki/Fuzzing |
849f72b72b41
add back fuzz.lisp and proper codegen for parquet.json thrift definitions
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
9 | |
849f72b72b41
add back fuzz.lisp and proper codegen for parquet.json thrift definitions
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
10 | ;;; Code: |
849f72b72b41
add back fuzz.lisp and proper codegen for parquet.json thrift definitions
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
11 | (in-package :rt/fuzz) |
849f72b72b41
add back fuzz.lisp and proper codegen for parquet.json thrift definitions
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
12 | |
849f72b72b41
add back fuzz.lisp and proper codegen for parquet.json thrift definitions
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
13 | (defvar *default-fuzz-generator* |
849f72b72b41
add back fuzz.lisp and proper codegen for parquet.json thrift definitions
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
14 | (lambda (state) |
849f72b72b41
add back fuzz.lisp and proper codegen for parquet.json thrift definitions
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
15 | (random most-positive-fixnum state))) |
849f72b72b41
add back fuzz.lisp and proper codegen for parquet.json thrift definitions
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
16 | |
849f72b72b41
add back fuzz.lisp and proper codegen for parquet.json thrift definitions
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
17 | (defclass fuzzer () |
849f72b72b41
add back fuzz.lisp and proper codegen for parquet.json thrift definitions
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
18 | ((state :initform (make-random-state t) |
849f72b72b41
add back fuzz.lisp and proper codegen for parquet.json thrift definitions
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
19 | :initarg :state |
849f72b72b41
add back fuzz.lisp and proper codegen for parquet.json thrift definitions
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
20 | :accessor fuzz-state) |
849f72b72b41
add back fuzz.lisp and proper codegen for parquet.json thrift definitions
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
21 | (generator :initform *default-fuzz-generator* |
849f72b72b41
add back fuzz.lisp and proper codegen for parquet.json thrift definitions
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
22 | :initarg :generator |
849f72b72b41
add back fuzz.lisp and proper codegen for parquet.json thrift definitions
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
23 | :type function |
849f72b72b41
add back fuzz.lisp and proper codegen for parquet.json thrift definitions
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
24 | :accessor fuzz-generator)) |
849f72b72b41
add back fuzz.lisp and proper codegen for parquet.json thrift definitions
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
25 | (:documentation "An object which provides invalid, unexpected or random data as inputs to some |
849f72b72b41
add back fuzz.lisp and proper codegen for parquet.json thrift definitions
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
26 | program.")) |
849f72b72b41
add back fuzz.lisp and proper codegen for parquet.json thrift definitions
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
27 | |
849f72b72b41
add back fuzz.lisp and proper codegen for parquet.json thrift definitions
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
28 | (defgeneric fuzz (self &key &allow-other-keys) |
849f72b72b41
add back fuzz.lisp and proper codegen for parquet.json thrift definitions
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
29 | (:method ((self fuzzer) &key &allow-other-keys) |
849f72b72b41
add back fuzz.lisp and proper codegen for parquet.json thrift definitions
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
30 | (funcall (the function (fuzz-generator self)) (fuzz-state self))) |
849f72b72b41
add back fuzz.lisp and proper codegen for parquet.json thrift definitions
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
31 | (:method ((self fuzzer) &key count) |
849f72b72b41
add back fuzz.lisp and proper codegen for parquet.json thrift definitions
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
32 | (if count |
849f72b72b41
add back fuzz.lisp and proper codegen for parquet.json thrift definitions
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
33 | (let ((ret)) |
849f72b72b41
add back fuzz.lisp and proper codegen for parquet.json thrift definitions
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
34 | (dotimes (i count ret) |
849f72b72b41
add back fuzz.lisp and proper codegen for parquet.json thrift definitions
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
35 | (push (funcall (the function (fuzz-generator self)) (fuzz-state self)) ret))) |
849f72b72b41
add back fuzz.lisp and proper codegen for parquet.json thrift definitions
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
36 | (fuzz self)))) |
849f72b72b41
add back fuzz.lisp and proper codegen for parquet.json thrift definitions
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
37 | |
849f72b72b41
add back fuzz.lisp and proper codegen for parquet.json thrift definitions
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
38 | (defgeneric fuzz* (state generator &key &allow-other-keys) |
849f72b72b41
add back fuzz.lisp and proper codegen for parquet.json thrift definitions
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
39 | (:method ((state list) (generator function) &key (count 1)) |
849f72b72b41
add back fuzz.lisp and proper codegen for parquet.json thrift definitions
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
40 | (let ((ret)) |
849f72b72b41
add back fuzz.lisp and proper codegen for parquet.json thrift definitions
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
41 | (dotimes (i count ret) |
849f72b72b41
add back fuzz.lisp and proper codegen for parquet.json thrift definitions
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
42 | (push (funcall generator state) ret)))) |
849f72b72b41
add back fuzz.lisp and proper codegen for parquet.json thrift definitions
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
43 | (:method ((state vector) (generator function) &key (count 1)) |
849f72b72b41
add back fuzz.lisp and proper codegen for parquet.json thrift definitions
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
44 | (let ((ret (make-array count :fill-pointer 0))) |
849f72b72b41
add back fuzz.lisp and proper codegen for parquet.json thrift definitions
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
45 | (dotimes (i count ret) |
849f72b72b41
add back fuzz.lisp and proper codegen for parquet.json thrift definitions
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
46 | (setf (aref ret i) (funcall generator state))))) |
849f72b72b41
add back fuzz.lisp and proper codegen for parquet.json thrift definitions
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
47 | (:method ((state hash-table) (generator function) &key (count 1)) |
849f72b72b41
add back fuzz.lisp and proper codegen for parquet.json thrift definitions
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
48 | (let ((ret (make-hash-table))) |
849f72b72b41
add back fuzz.lisp and proper codegen for parquet.json thrift definitions
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
49 | (dotimes (i count ret) |
849f72b72b41
add back fuzz.lisp and proper codegen for parquet.json thrift definitions
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
50 | (destructuring-bind (k v) (funcall generator state) |
647 | 51 | (setf (gethash k ret) v))))) |
52 | (:method ((state random-state) (generator function) &key (count 1)) |
|
53 | (let ((ret)) |
|
54 | (dotimes (i count ret) |
|
55 | (push (funcall generator state) ret))))) |