Subject: read() and suspend()

From: [email-masked]
Date: Tue, 21 Sep 1993 16:18:34 -0700

from 'help read()'

[after much text about how impossible it is to call read() after suspend()]

"It is possible to call `read()' many times in the same command task, so
long as the task does not call `suspend()' or an explicit argument is
given."

or an explicit argument is given to which?  read?  or suspend?

Does read take an argument?

If so, what type?
-- 
--
-- "TANSTAAFL" Rich [email-masked]

---

From: [email-masked] (Erik Ostrom)
Date: Tue, 21 Sep 1993 11:41:01 -0700

from 'help read()'

"Syntax:  read ([obj <player>])   => str"

"This function suspends the current task, waiting for a line of input
from the given <player> (which defaults to the player that typed the
command that initiated the current task), and resumes when such a line
is received, returning that line as a string...  `Read()' may only be
called by a wizard, and, unless <player> is given explicitly, only in
a command task that has never been suspended by a call to
`suspend()'."

If you hadn't deleted so much text, I could've answered your mail just
by quoting it out of order.

---

From: [email-masked] (Jack Eifrig)
Date: Wed, 22 Sep 1993 08:21:51 -0700

Coincidentally, I ran into a very neat security hole involving features
and the Recycler the other day.  Seems that features don't remove
themselves from a player's feature list when they hit the Bit Bucket.

Now, $player:my_huh() strips out recycled features when it goes a-huntin',
but that's really not sufficient:

Seems that a player recycled one of his features, and another player
coincidentally made a feature with the same number.  Needless to say,
Bad Things could have happened.

The solution is to make a :recycle() verb for the feature, and patch
the permissions checks for $player:remove_feature with "... || caller
= feature || ...".