flaw found [in my own program]

Gary Kline kline at thought.org
Tue Jun 9 23:40:45 UTC 2009


On Tue, Jun 09, 2009 at 06:19:21PM -0500, Jeffrey Goldberg wrote:
> On Jun 8, 2009, at 7:15 PM, Gary Kline wrote:
> 
> >	not surprisingly, i found a fla w in my getc(fp) program that
> >	tried to read past "<?" and "?>" ...  the example i added to my
> >	test file was simply the 2 bytes "<" and "?".  so if you have a
> >	stray
> >
> >	"<?"
> >
> >	with a matching close case, the binary hangs on a read.
> >	so, again, can anybody suggest a better example, in C, to get
> >	past two delimiters?
> 
> Back in the days when I taught introductory C programming, one the the  
> early homework assignments was to write a filter that would strip C- 
> style comments.  As a follow-up they had to do this allowing for  
> nested comments.
> 
> I don't think I can recover things from the back-up tapes that I have  
> for that corse material, but the approach I directed people toward was  
> to have a variable, let's call it status that records one of four states
> 
>  OUTSIDE  /* just reading normally, not in the material to be striped  
> */
>  AFTER_LT /* You've read in a '<' and are looking for a '?' */
>  INSIDE   /* You are in the material to be stripped */
>  AFTER_Q  /* You are in the material to be stripped and have just  
> read a '?' */
> 
> then use a switch statement on the character you are reading in.
> 
>        switch(c) {
>          case '<': ...
>          case '?': ...
>          case '>': ...
>          case EOF: ...
>          default: ...
>        }
> 
> In each case, you look at the current state, decide whether the write  
> 'c' to output and what state to change to.  The most common mistake  
> students would make would be to forget the EOF case.  I suspect that  
> you may have done the same.
> 
> -j


	:-)

	yup, this is definitely better that initial approach.  i have improved my
	function to return a 1 after "?", 2 after a "?>" and a 3 if both are
	found.  i still think my function hangs in an loop if only the opening php
	token is found.

	thanks for the idea!

	gary


> 

-- 
 Gary Kline  kline at thought.org  http://www.thought.org  Public Service Unix
        http://jottings.thought.org   http://transfinite.thought.org
       For FBSD list: http://transfinite.thought.org/slicejourney.php
    The 4.91a release of Jottings: http://jottings.thought.org/index.php



More information about the freebsd-questions mailing list