state machine defect in drivers/tty/vt/vt.c?
vc->vc_state is sequentially set to different values.
Looks like there's either a return or a break
missing at the end of case ESgetpars:
Anyone know the right fix here?
/* console_lock is held */
static void do_con_trol(struct tty_struct *tty, struct vc_data *vc, int c) {
[...]
switch(vc->vc_state) {
[...]
case ESgetpars:
if (c == ';' && vc->vc_npar < NPAR - 1) {
vc->vc_npar++;
return;
} else if (c>='0' && c<='9') {
vc->vc_par[vc->vc_npar] *= 10;
vc->vc_par[vc->vc_npar] += c - '0';
return;
} else
vc->vc_state = ESgotpars;
case ESgotpars:
vc->vc_state = ESnormal;Quoted 6 lines · Joe Perches
vc->vc_stateis sequentially set to different values.Looks like there's either a return or a break
missing at the end of case ESgetpars:Anyone know the right fix here?
The first assignment can be removed.
Quoted 4 lines
case ESgetpars:
if (c == ';' && vc->vc_npar < NPAR - 1) {
vc->vc_npar++;
return;Quoted 8 lines
} else if (c>='0' && c<='9') {
vc->vc_par[vc->vc_npar] *= 10;
vc->vc_par[vc->vc_npar] += c - '0';
return;
} else
vc->vc_state = ESgotpars;
case ESgotpars:
vc->vc_state = ESnormal;That handles cases like '\033[m' where '\033[' enters state ESgetpars, but 'm' is handled by ESgotpars.
Andreas.
Signature · 3 lines
Andreas Schwab, [email protected] GPG Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5 "And now for something completely different."