This is the mail archive of the kawa@sourceware.org mailing list for the Kawa project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

two bugs in reference implementation of SRFI 13


A Kawa user just discovered a bug in string-contains, which I tracked
down to the reference implementation of make-kmp-restart-vector.

string-parse-start+end is documented to return three values:
"rest start end", but in make-kmp-restart-vector its result is bound
to two variables (start end). I found the same issue in
string-kmp-partial-search, which also attempts to capture only the
"start" and "end" values.

The fix in both places is to call string-parse-final-start+end instead,
which strips off the first unwanted rest value from string-parse-start +end.



--- srfi-13.scm 2006-11-21 16:18:11.000000000 -0500
+++ srfi-13-fixed.scm 2011-12-22 15:17:59.000000000 -0500
@@ -1381,7 +1381,7 @@
(let-optionals* maybe-c=+start+end
((c= char=? (procedure? c=))
((start end) (lambda (args)
- (string-parse-start+end make-kmp-restart-vector
+ (string-parse-final-start+end make-kmp-restart-vector
pattern args))))
(let* ((rvlen (- end start))
(rv (make-vector rvlen -1)))
@@ -1450,7 +1450,7 @@
((c= char=? (procedure? c=))
(p-start 0 (and (integer? p-start) (exact? p-start) (<= 0 p- start)))
((s-start s-end) (lambda (args)
- (string-parse-start+end string-kmp-partial-search
+ (string-parse-final-start+end string-kmp-partial-search
s args))))
(let ((patlen (vector-length rv)))
(check-arg (lambda (i) (and (integer? i) (exact? i) (<= 0 i) (< i patlen)))




--
Jamison Hope
The PTR Group
www.theptrgroup.com




Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]