diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2016-06-17 21:44:21 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2016-06-17 21:44:21 -0700 |
commit | a76c0203d7062f9433c894e529fe11c0fbfc2d7d (patch) | |
tree | 43386a39cf866ee91a588e6080a028fa8e64644a /match.c | |
parent | a208fafe0b0bf6dd5a78c939e55f0153f6bd6b19 (diff) | |
download | txr-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.c | 12 |
1 files changed, 6 insertions, 6 deletions
@@ -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)); } |