comparison arogue7/options.c @ 254:e940e6c00751

Add some braces to a loop in parse_opts(). A for loop had no braces around its body, which was a single if-else statement. In Advanced Rogue 5, another statement had been added, accidentally removing the if-else from the loop. This could have resulted in an out-of-bounds access to the options array. In the other games, the added braces are only for clarity.
author John "Elwin" Edwards
date Fri, 10 Feb 2017 09:02:58 -0500
parents 50b89f165a34
children d3968e9cb98d
comparison
equal deleted inserted replaced
252:3d4252fa2ed3 254:e940e6c00751
348 len = (int)(sp - str); 348 len = (int)(sp - str);
349 /* 349 /*
350 * Look it up and deal with it 350 * Look it up and deal with it
351 */ 351 */
352 for (op = optlist; op <= &optlist[NUM_OPTS-1]; op++) 352 for (op = optlist; op <= &optlist[NUM_OPTS-1]; op++)
353 {
353 if (EQSTR(str, op->o_name, len)) 354 if (EQSTR(str, op->o_name, len))
354 { 355 {
355 if (op->o_putfunc == put_bool) /* if option is a boolean */ 356 if (op->o_putfunc == put_bool) /* if option is a boolean */
356 *(bool *)op->o_opt = TRUE; 357 *(bool *)op->o_opt = TRUE;
357 else /* string option */ 358 else /* string option */
410 && EQSTR(str, "no", 2) && EQSTR(str + 2, op->o_name, len - 2)) 411 && EQSTR(str, "no", 2) && EQSTR(str + 2, op->o_name, len - 2))
411 { 412 {
412 *(bool *)op->o_opt = FALSE; 413 *(bool *)op->o_opt = FALSE;
413 break; 414 break;
414 } 415 }
416 }
415 417
416 /* 418 /*
417 * skip to start of next option name 419 * skip to start of next option name
418 */ 420 */
419 while (*sp && !isalpha(*sp)) 421 while (*sp && !isalpha(*sp))