--- bf.c 2012-09-28 17:57:12.000000000 +0900 +++ bf.c.patched 2019-02-04 23:59:48.874083499 +0900 @@ -139,16 +139,15 @@ register Progr *px = program + i; if(px->op == '[') { - int j, l=0; + int j, l=1; for(j=i+1; jop == '[') l++; if((program+j)->op == ']') { - if (l) - l--; - else + l--; + if (!l) break; } } @@ -156,6 +155,11 @@ ErrorMsg(errBRACKET, "Unbalanced brackets."); px->match = j; (program+j)->match = i; + } else + if(px->op == ']') + { + if(px->match == -1) + ErrorMsg(errBRACKET, "Unbalanced brackets."); } } } @@ -233,6 +237,10 @@ case '<': x->step--; break; + case ']': + x->op = *c; + x->match = -1; + break; default: x->op = *c; break;