diff --git a/src/builtins/sfns.c b/src/builtins/sfns.c index c42ae3cc..b72c18b1 100644 --- a/src/builtins/sfns.c +++ b/src/builtins/sfns.c @@ -495,6 +495,8 @@ NOINLINE B takedrop_highrank(bool take, B w, B x) { usz ria = 1; bool anyFill = false; i64 cellStart = -1; // axis from which whole cells can be copied + bool overflow = false; + bool anyZero = false; for (usz i = 0; i < rr; i++) { i64 cw = ixshc; rsh->a[i] = c; - if (mulOn(ria, c)) thrOOM(); + if (c==0) anyZero = true; + if (mulOn(ria, c)) overflow = true; + } + if (overflow) { + if (!anyZero) thrOOM(); + ria = 0; } CHECK_IA(ria, 8);