This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "CMU Common Lisp".
The branch, master has been updated via 3be4fc215fa2a4d23dc145e6cfa9519492525bc1 (commit) from cdf11377fbdb369d3a3810dd9bd01a8a73007255 (commit)
Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below.
- Log ----------------------------------------------------------------- commit 3be4fc215fa2a4d23dc145e6cfa9519492525bc1 Author: Raymond Toy toy.raymond@gmail.com Date: Sat Dec 22 12:46:45 2012 -0800
Fix ticket:67
Check that the start and end indices make sense for the given strings. This is important before we start bashing random parts of the string, potentially overwriting other objects.
diff --git a/src/compiler/generic/vm-tran.lisp b/src/compiler/generic/vm-tran.lisp index 3376163..a90c87f 100644 --- a/src/compiler/generic/vm-tran.lisp +++ b/src/compiler/generic/vm-tran.lisp @@ -240,22 +240,34 @@ (deftransform replace ((string1 string2 &key (start1 0) (start2 0) end1 end2) (simple-string simple-string &rest t)) - '(locally (declare (optimize (safety 0))) - (bit-bash-copy string2 - (the vm::offset - (+ (the vm::offset (* start2 vm:char-bits)) - vector-data-bit-offset)) - string1 - (the vm::offset - (+ (the vm::offset (* start1 vm:char-bits)) - vector-data-bit-offset)) - (the vm::offset - (* (min (the vm::offset (- (or end1 (length string1)) - start1)) - (the vm::offset (- (or end2 (length string2)) - start2))) - vm:char-bits))) - string1)) + '(progn + ;; Make sure the indices make sense before we go bashing bits + ;; around! + (assert (<= 0 start1)) + (assert (<= start1 (or end1 (length string1)))) + (assert (<= (or end1 (length string1)) (length string1))) + + (assert (<= 0 start2)) + (assert (<= start2 (or end2 (length string2)))) + (assert (<= (or end2 (length string2)) (length string2))) + + (locally + (declare (optimize (safety 0))) + (bit-bash-copy string2 + (the vm::offset + (+ (the vm::offset (* start2 vm:char-bits)) + vector-data-bit-offset)) + string1 + (the vm::offset + (+ (the vm::offset (* start1 vm:char-bits)) + vector-data-bit-offset)) + (the vm::offset + (* (min (the vm::offset (- (or end1 (length string1)) + start1)) + (the vm::offset (- (or end2 (length string2)) + start2))) + vm:char-bits))) + string1)))
;; The original version of this deftransform seemed to cause the ;; compiler to spend huge amounts of time deriving the type of the
-----------------------------------------------------------------------
Summary of changes: src/compiler/generic/vm-tran.lisp | 44 +++++++++++++++++++++++------------- 1 files changed, 28 insertions(+), 16 deletions(-)
hooks/post-receive