Make maximum list size large enough to accommodate pitch bend.

master
Albert Graef 2018-08-28 15:22:42 +02:00
parent ac8cff19c5
commit fe255692c1
1 changed files with 7 additions and 5 deletions

View File

@ -899,6 +899,8 @@ static int note_number(char c, char b, int k)
} }
} }
#define MAXSTEPS 8193
static char *parse_steps(char *tok, char *p, static char *parse_steps(char *tok, char *p,
int *step, int *n_steps, int **steps) int *step, int *n_steps, int **steps)
{ {
@ -907,7 +909,7 @@ static char *parse_steps(char *tok, char *p,
p += n; p += n;
if (*p == ',' || *p == ':') { if (*p == ',' || *p == ':') {
int n_st = 1; int n_st = 1;
static int st[128]; static int st[MAXSTEPS];
st[0] = l; st[0] = l;
while (*p == ',' || *p == ':') { while (*p == ',' || *p == ':') {
char c = *p; char c = *p;
@ -920,19 +922,19 @@ static char *parse_steps(char *tok, char *p,
if (l <= 0) { if (l <= 0) {
// remove the last value // remove the last value
if (n_st > 0) n_st--; if (n_st > 0) n_st--;
} else if (n_st > 0 && n_st < 128) { } else if (n_st > 0 && n_st < MAXSTEPS) {
int last = st[n_st-1]; int last = st[n_st-1];
for (int i = 1; i < l; i++) { for (int i = 1; i < l; i++) {
st[n_st++] = last; st[n_st++] = last;
if (n_st == 128) { if (n_st == MAXSTEPS) {
fprintf(stderr, "warning: too many steps: %s\n", tok); fprintf(stderr, "warning: too many steps: %s\n", tok);
break; break;
} }
} }
} }
} else if (n_st < 128) { } else if (n_st < MAXSTEPS) {
st[n_st++] = l; st[n_st++] = l;
if (n_st == 128) if (n_st == MAXSTEPS)
fprintf(stderr, "warning: too many steps: %s\n", tok); fprintf(stderr, "warning: too many steps: %s\n", tok);
} }
} }