mkstr truncates strings and converts octal wrong +FIX

Steven M. Schultz sms at etn-wlv.eaton.com
Thu Apr 6 15:14:54 AEST 1989


Description:
	'mkstr' incorrectly processes octal numbers in strings.

	Characters of the form \ooo where 'o' is an octal digit
	possibly result in a truncated string (if the first digit
	is 0) AND definitely result in an incorrect value if more
	than one digit is present.

Repeat-By:
	Run 'mkstr' on a file having a string of the form "foo\001bar".
	Note that only "foo\0" makes it to the output.  Guess "0" 
	wasn't considered an octal digit at some point in the past ;-)

	Run 'mkstr' on a file having a string of the form "foo\13", note
	that "foo\203" is the result.  This is a result of shifting by
	7 instead of three in the conversion process.

Fix:
	Apply the following patch to mkstr.c, the extra assign of -1 to ch
	wasn't needed anyway.

*** mkstr.c.old	Wed Apr  5 21:20:30 1989
--- mkstr.c	Wed Apr  5 21:27:03 1989
***************
*** 164,172 ****
  			case 'f':
  				c = '\f';
  				break;
- 			case '0':
- 				c = 0;
- 				break;
  			case '\\':
  				break;
  			default:
--- 164,169 ----
***************
*** 176,186 ****
  				ch = getchar();
  				if (!octdigit(ch))
  					break;
! 				c <<= 7, c += ch - '0';
  				ch = getchar();
  				if (!octdigit(ch))
  					break;
! 				c <<= 3, c+= ch - '0', ch = -1;
  				break;
  			}
  		}
--- 173,183 ----
  				ch = getchar();
  				if (!octdigit(ch))
  					break;
! 				c <<= 3, c += ch - '0';
  				ch = getchar();
  				if (!octdigit(ch))
  					break;
! 				c <<= 3, c += ch - '0';
  				break;
  			}
  		}



More information about the Comp.bugs.2bsd mailing list