Tweak strlen checks.
This commit is contained in:
parent
c1580523ee
commit
9d46a618b6
|
@ -22,16 +22,12 @@
|
|||
; Cube a
|
||||
(def cube (fn (a) (exp a 3)))
|
||||
|
||||
(def fib_ (fn (a depth) (
|
||||
(prnl (cat "n: " a))
|
||||
(def fib (fn (a)
|
||||
(if (< a 2)
|
||||
a
|
||||
(+ (fib_ (- a 1) (+ 1 depth)) (fib_ (- a 2) (+ 1 depth)))
|
||||
)
|
||||
(+ (fib (- a 1)) (fib (- a 2)))
|
||||
)))
|
||||
|
||||
(def fib (fn (a) ((fib a 0))))
|
||||
|
||||
; Return the larger of the two
|
||||
(def max (fn (a b) (if (> a b) a b)))
|
||||
|
||||
|
|
|
@ -44,7 +44,6 @@
|
|||
|
||||
(def first (fn (list) (at 0 list)))
|
||||
|
||||
(def up "..")
|
||||
(def ~ (env "HOME"))
|
||||
|
||||
(def config (cat ~ "/.pebblisp.pbl"))
|
||||
|
|
|
@ -256,9 +256,15 @@ Object substring(Object* params, int length, unused struct Environment* env)
|
|||
Object string = params[2];
|
||||
|
||||
int len = end.number - start.number;
|
||||
if (len < 0 || start.number >= strlen(string.string)) {
|
||||
size_t stringLen = strlen(string.string);
|
||||
if (len < 0 || start.number > stringLen) {
|
||||
return errorWithContext(BAD_PARAMS, string.string);
|
||||
}
|
||||
|
||||
if (len > stringLen - start.number) {
|
||||
len = stringLen - start.number;
|
||||
}
|
||||
|
||||
Object substr = withLen(len, TYPE_STRING);
|
||||
snprintf(substr.string, len + 1, "%s", string.string + start.number);
|
||||
return substr;
|
||||
|
|
Loading…
Reference in New Issue