yet another desk calculator has a bug!

Keith Packard keith at motel6.UUCP
Wed Mar 19 15:14:12 AEST 1986


I thought this program was too simple to have bugs!  Alas I was
mistaken.  The following is a segment of the file expr.c, toward
the end of the routine eeval.  The changed lines are marked with '!'
marks.

Keith Packard
...!tektronix!reed!motel6!keith

-----------------------------------start of fix---------------------
	case INC:
		if (f->e_left == 0) {
			s = f->e_right->e_name;
			switch (s->s_type) {
			case UNDEF:
				s->s_type = VARTYPE;
			case VARTYPE:
				r = s->s_value;
				s->s_value += 1;
				break;
			case STACKTYPE:
				r = framep[s->s_offset];
				framep[s->s_offset] += 1;
			}
			return r;
		} else {
!			s = f->e_left->e_name;
			switch (s->s_type) {
			case UNDEF:
				s->s_type = VARTYPE;
			case VARTYPE:
				return (s->s_value += 1);
			case STACKTYPE:
				return (framep[s->s_offset] += 1);
			}
		}
	case DEC:
		if (f->e_left == 0) {
			s = f->e_right->e_name;
			switch (s->s_type) {
			case UNDEF:
				s->s_type = VARTYPE;
			case VARTYPE:
				r = s->s_value;
				s->s_value -= 1.0;
				break;
			case STACKTYPE:
				r = framep[s->s_offset];
				framep[s->s_offset] -= 1.0;
			}
			return r;
		} else {
!			s = f->e_left->e_name;
			switch (s->s_type) {
			case UNDEF:
				s->s_type = VARTYPE;
			case VARTYPE:
				return (s->s_value -= 1.0);
			case STACKTYPE:
				return (framep[s->s_offset] -= 1.0);
			}
		}

----------------------------------end of fix---------------------------------



More information about the Comp.sources.bugs mailing list