--- ray/src/util/rfluxmtx.c 2017/05/13 01:50:54 2.45 +++ ray/src/util/rfluxmtx.c 2019/07/29 22:52:39 2.48 @@ -1,5 +1,5 @@ #ifndef lint -static const char RCSid[] = "$Id: rfluxmtx.c,v 2.45 2017/05/13 01:50:54 greg Exp $"; +static const char RCSid[] = "$Id: rfluxmtx.c,v 2.48 2019/07/29 22:52:39 greg Exp $"; #endif /* * Calculate flux transfer matrix or matrices using rcontrib @@ -18,7 +18,9 @@ static const char RCSid[] = "$Id: rfluxmtx.c,v 2.45 20 #include "triangulate.h" #include "platform.h" -#define MAXRCARG 512 +#ifndef MAXRCARG +#define MAXRCARG 10000 +#endif char *progname; /* global argv[0] */ @@ -142,12 +144,20 @@ oconv_command(int ac, char *av[]) strcpy(cp, "-w- "); cp += 4; } - while (ac-- > 0) { - strcpy(cp, *av++); - while (*cp) cp++; - *cp++ = ' '; - if (cp >= oconvbuf+(sizeof(oconvbuf)-32)) + while (ac-- > 0) { /* copy each argument */ + int len = strlen(*av); + if (cp+len+4 >= oconvbuf+sizeof(oconvbuf)) goto overrun; + if (matchany(*av, SPECIALS)) { + *cp++ = QUOTCHAR; + strcpy(cp, *av++); + cp += len; + *cp++ = QUOTCHAR; + } else { + strcpy(cp, *av++); + cp += len; + } + *cp++ = ' '; } /* receiver goes last */ if (matchany(recv, SPECIALS)) { @@ -659,7 +669,7 @@ sample_origin(PARAMS *p, FVECT orig, const FVECT rdir, projsa[i] = -DOT(sp->snrm, rdir) * sp->area; tarea += projsa[i] *= (double)(projsa[i] > FTINY); } - if (tarea <= FTINY) { /* wrong side of sender? */ + if (tarea < 0) { /* wrong side of sender? */ fputs(progname, stderr); fputs(": internal - sample behind all sender elements!\n", stderr);