Skip to content

Commit

Permalink
Correct cases where there ould be fpt overflow related to NOT_AN_INST…
Browse files Browse the repository at this point in the history
…RUMENT
  • Loading branch information
jpffitch committed May 20, 2018
1 parent 6654d78 commit fc933d4
Showing 1 changed file with 23 additions and 14 deletions.
37 changes: 23 additions & 14 deletions Engine/linevent.c
Expand Up @@ -464,18 +464,21 @@ int eventOpcode_(CSOUND *csound, LINEVENT *p, int insname, char p1)
/* IV - Oct 31 2002: allow string argument */
if (evt.pcnt > 0) {
if (insname) {
int res;
if (UNLIKELY(evt.opcod != 'i' && evt.opcod != 'q' && opcod != 'd'))
return csound->PerfError(csound, p->h.insdshead, "%s", Str(errmsg_2));
evt.p[1] = csound->strarg2insno(csound,
((STRINGDAT*) p->args[1])->data, 1);
if (UNLIKELY(evt.p[1] == NOT_AN_INSTRUMENT)) return NOTOK;
res = csound->strarg2insno(csound, ((STRINGDAT*) p->args[1])->data, 1);
if (UNLIKELY(res == NOT_AN_INSTRUMENT)) return NOTOK;
evt.p[1] = (MYFLT) res;
evt.strarg = NULL; evt.scnt = 0;
}
else {
int res;
if (csound->ISSTRCOD(*p->args[1])) {
evt.p[1] = csound->strarg2insno(csound,
get_arg_string(csound, *p->args[1]), 1);
if (UNLIKELY(evt.p[1] != NOT_AN_INSTRUMENT)) return NOTOK;
res = csound->strarg2insno(csound,
get_arg_string(csound, *p->args[1]), 1);
if (UNLIKELY(res == NOT_AN_INSTRUMENT)) return NOTOK;
evt.p[1] = (MYFLT)res;
} else evt.p[1] = *p->args[1];
evt.strarg = NULL; evt.scnt = 0;
}
Expand Down Expand Up @@ -531,20 +534,23 @@ int eventOpcodeI_(CSOUND *csound, LINEVENT *p, int insname, char p1)
/* IV - Oct 31 2002: allow string argument */
if (evt.pcnt > 0) {
if (insname) {
int res;
if (UNLIKELY(evt.opcod != 'i' && evt.opcod != 'q' && opcod != 'd'))
return csound->InitError(csound, "%s", Str(errmsg_2));
evt.p[1] = csound->strarg2insno(csound,((STRINGDAT *)p->args[1])->data, 1);
if (UNLIKELY(evt.p[1] == NOT_AN_INSTRUMENT)) return NOTOK;
res = csound->strarg2insno(csound,((STRINGDAT *)p->args[1])->data, 1);
if (UNLIKELY(res == NOT_AN_INSTRUMENT)) return NOTOK;
evt.p[1] = (MYFLT)res;
evt.strarg = NULL; evt.scnt = 0;
for (i = 2; i <= evt.pcnt; i++)
evt.p[i] = *p->args[i];
}
else {
evt.strarg = NULL; evt.scnt = 0;
if (csound->ISSTRCOD(*p->args[1])) {
evt.p[1] = csound->strarg2insno(csound,
get_arg_string(csound, *p->args[1]), 1);
int res = csound->strarg2insno(csound,
get_arg_string(csound, *p->args[1]), 1);
if (UNLIKELY(evt.p[1] == NOT_AN_INSTRUMENT)) return NOTOK;
evt.p[1] = (MYFLT)res;
} else evt.p[1] = *p->args[1];
for (i = 2; i <= evt.pcnt; i++)
evt.p[i] = *p->args[i];
Expand Down Expand Up @@ -591,17 +597,20 @@ int instanceOpcode_(CSOUND *csound, LINEVENT2 *p, int insname)

/* IV - Oct 31 2002: allow string argument */
if (evt.pcnt > 0) {
int res;
if (insname) {
evt.p[1] = csound->strarg2insno(csound,
((STRINGDAT*) p->args[0])->data, 1);
res = csound->strarg2insno(csound,
((STRINGDAT*) p->args[0])->data, 1);
if (UNLIKELY(evt.p[1] == NOT_AN_INSTRUMENT)) return NOTOK;
evt.p[1] = (MYFLT)res;
evt.strarg = NULL; evt.scnt = 0;
}
else {
if (csound->ISSTRCOD(*p->args[0])) {
evt.p[1] = csound->strarg2insno(csound,
get_arg_string(csound, *p->args[0]), 1);
res = csound->strarg2insno(csound,
get_arg_string(csound, *p->args[0]), 1);
if (UNLIKELY(evt.p[1] == NOT_AN_INSTRUMENT)) return NOTOK;
evt.p[1] = (MYFLT)res;
} else evt.p[1] = *p->args[0];
evt.strarg = NULL; evt.scnt = 0;
}
Expand Down

0 comments on commit fc933d4

Please sign in to comment.