summaryrefslogtreecommitdiffstats
path: root/match.c
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2016-06-17 21:44:21 -0700
committerKaz Kylheku <kaz@kylheku.com>2016-06-17 21:44:21 -0700
commita76c0203d7062f9433c894e529fe11c0fbfc2d7d (patch)
tree43386a39cf866ee91a588e6080a028fa8e64644a /match.c
parenta208fafe0b0bf6dd5a78c939e55f0153f6bd6b19 (diff)
downloadtxr-a76c0203d7062f9433c894e529fe11c0fbfc2d7d.tar.gz
txr-a76c0203d7062f9433c894e529fe11c0fbfc2d7d.tar.bz2
txr-a76c0203d7062f9433c894e529fe11c0fbfc2d7d.zip
Bugfix: unsafe num_fast in repeat/rep :counter code.
* match.c (do_output_line): Use num(i) rather than num_fast(i), because i is not guaranteed to be in the fixnum range. It's less than c_num(max_depth), which could be a bignum that is in the cnum range.
Diffstat (limited to 'match.c')
-rw-r--r--match.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/match.c b/match.c
index dcc685d1..edba90fc 100644
--- a/match.c
+++ b/match.c
@@ -1821,7 +1821,7 @@ static void do_output_line(val bindings, val specline, val filter, val out)
val bind_d = mapcar(func_n1(bind_cdr), bind_cp);
if (counter) {
- rplacd(counter_var, plus(num_fast(i), counter_base));
+ rplacd(counter_var, plus(num(i), counter_base));
rplacd(counter_bind, bind_a);
bind_a = counter_bind;
}
@@ -1840,7 +1840,7 @@ static void do_output_line(val bindings, val specline, val filter, val out)
val n = tleval_144(args, first(args), bind_a);
val m = tleval_144(args, second(args), bind_a);
- if (eql(mod(num_fast(i), m), n))
+ if (eql(mod(num(i), m), n))
ptail = list_collect_append(ptail, rest(clause));
}
@@ -1863,7 +1863,7 @@ static void do_output_line(val bindings, val specline, val filter, val out)
val n = tleval_144(args, first(args), bind_a);
val m = tleval_144(args, second(args), bind_a);
- if (eql(mod(num_fast(i), m), n))
+ if (eql(mod(num(i), m), n))
ptail = list_collect_append(ptail, rest(clause));
}
@@ -1960,7 +1960,7 @@ static void do_output(val bindings, val specs, val filter, val out)
val bind_d = mapcar(func_n1(bind_cdr), bind_cp);
if (counter) {
- rplacd(counter_var, plus(num_fast(i), counter_base));
+ rplacd(counter_var, plus(num(i), counter_base));
rplacd(counter_bind, bind_a);
bind_a = counter_bind;
}
@@ -1980,7 +1980,7 @@ static void do_output(val bindings, val specs, val filter, val out)
val n = tleval_144(args, first(args), bind_a);
val m = tleval_144(args, second(args), bind_a);
- if (eql(mod(num_fast(i), m), n))
+ if (eql(mod(num(i), m), n))
ptail = list_collect_append(ptail, rest(clause));
}
@@ -2003,7 +2003,7 @@ static void do_output(val bindings, val specs, val filter, val out)
val n = tleval_144(args, first(args), bind_a);
val m = tleval_144(args, second(args), bind_a);
- if (eql(mod(num_fast(i), m), n))
+ if (eql(mod(num(i), m), n))
ptail = list_collect_append(ptail, rest(clause));
}