~ chicken-core (chicken-5) d28e16ab4920a4c587444fa2afba82c219fa79ab
commit d28e16ab4920a4c587444fa2afba82c219fa79ab
Author: zbigniew <zbigniewsz@gmail.com>
AuthorDate: Thu Jun 23 17:46:16 2011 -0500
Commit: felix <felix@call-with-current-continuation.org>
CommitDate: Fri Jun 24 13:28:06 2011 +0200
string->number accepted out-of-range characters for base > 10
diff --git a/runtime.c b/runtime.c
index f6e0b934..ab6456b6 100644
--- a/runtime.c
+++ b/runtime.c
@@ -7347,7 +7347,7 @@ static int from_n_nary(C_char *str, int base, double *r)
else if(c >= '0' + base) {
if(base < 10) return 0;
else if(c < 'a') return 0;
- else if(c >= 'a' + base) return 0;
+ else if(c >= 'a' + base - 10) return 0;
else n = n * base + c - 'a' + 10;
}
else n = n * base + c - '0';
diff --git a/tests/library-tests.scm b/tests/library-tests.scm
index a01f2b2f..8aa5441c 100644
--- a/tests/library-tests.scm
+++ b/tests/library-tests.scm
@@ -69,6 +69,12 @@
'("100000" "1012" "200" "112" "52" "44" "40" "35" "32" "2A" "28" "26" "24" "22" "20")))
+;; string->number conversion
+
+(assert (= 255 (string->number "ff" 16)))
+(assert (not (string->number "fg" 16)))
+
+
;; fp-math
(assert (= (sin 42.0) (fpsin 42.0)))
Trap