Subject: Release 1.7.2 of the LambdaMOO server code

From: Pavel Curtis <[email-masked]>
Date: Tue, 3 Aug 1993 21:00:47 -0700

I have just released a new version of the LambdaMOO server code, version 1.7.2.
This release is primarily a bug-fix release.  In particular, I have fixed all
of the reported bugs that looked at all straightforward and I have tried to fix
as many of the reported installation/configuration problems as I could.  In the
latter category, though, there were some for which I just didn't have enough
information at hand to effect a fix.  A few smallish features did slip through,
though, so there is some kind of upward progress.

Here's a warning of an upcoming incompatible change in 1.8.0 that y'all should
start preparing for now:

-- Lines of input received on outbound network connections (those created by
   open_network_connection()) will no longer be treated as commands.  Instead,
   they will just wait until a call to read() picks them up.

   The proper transition strategy is to make sure that there's *always* a
   read()ing task waiting for input on all outbound connections.  This code
   will work now (because there will never be an opportunity for the server to
   try to interpret the input as commands) and later (though it will no longer
   be important to keep a read()ing task always waiting).

As usual, please let me know if you have any problems with this release; I will
try to put out another patch release promptly if any serious bugs are
uncovered.

A new version of the LambdaMOO Programmer's Manual, with edits to account for
this release, should be out shortly.

Here is the complete list of changes in this release, taken from ChangeLog.txt:

Version 1.7.2, 3 August 1993
-- Made tabs input as themselves, rather than being mapped to spaces.  This is
   necessary in order to communicate with Gopher servers from within the MOO.
-- Reduced the default `seconds-left' limit for task; forground tasks went from
   15 to 5 seconds and background tasks from 5 to 3.
-- Fixed regular-expression matching to respect task seconds limits, aborting
   the match.
-- Fixed bugs whereby both kill_task() and queued_tasks() would miss reading
   tasks that had no ready input (i.e., whose associated task queues were
   empty).
-- Fixed memory leak when a read() call fails with E_INVARG; the copied
   interpreter stack was never being freed.
-- Fixed possible free of the null pointer during object recycling.
-- Fixed a number of places that generated warnings in newer versions of GCC.
-- Fixed inconsistency of the behavior of strcmp() between different server
   machines; now it always returns one of 1, 0, or -1.
-- Added a five-second timeout to outbound connection attempts, aborting them
   if the timer expires.
-- Made the error message to users about network buffers overflowing and lines
   of output being flushed much more understandable.
-- Added log entry for each time the server refuses a connection due to being
   full.
-- Fixed premature-free bug in preposition matching.
-- Bowing to popular pressure, removed warning from `.program' command about
   its (no longer) imminent demise.
-- Added more error checks to options.h to make it easier for installers to
   diagnose problems.
-- Fixed a bunch of auto-configuration problems encountered by installers.
-- Fixed a bug in substitute() where certain successful match() results were
   rejected as invalid.
-- Removed restrictions that only player objects could be used in place of `x'
   in the following:
	object.owner = x
	add_property(object, pname, value, {x, perms})
	set_property_info(object, pname, {x, perms})
	add_verb(object, {x, perms, names}, args)
	set_verb_info(object, vname, {x, perms, names})
	set_task_perms(x)
   That is, non-players may now own objects, verbs, and properties, and running
   tasks may take on the authority of a non-player.
-- Fixed bug where it was possible for a task to run out of seconds during a
   call to set_verb_code() and have a truncated version of the program
   installed as the new verb code.  Now, either all of it gets installed or
   none of it.
-- The log messages produced by successful open_network_connection() calls are
   more useful now, containing the hostname and port of the connection.
-- Outbound network connections are no longer susceptible to connection
   timeouts due to a lack of input.
-- Fixed a bug whereby verbs with numeric names screwed up DB loading, with the
   wrong code getting put into some verbs and others getting no code at all.

---

From: Larry Masinter <[email-masked]>
Date: Wed, 4 Aug 1993 00:38:14 -0700

Looks like there's a bug in substitute:

Previously:

;match("chinese", "%(c%)")
=> {1, 1, {{1, 1}, {0, -1}, {0, -1}, {0, -1}, {0, -1}, {0, -1}, {0, -1}, {0, -1}, {0, -1}},
"chinese"}
;substitute("%1", match("chinese", "%(c%)"))
=> "c"

Now, however, you get Invalid Argument on the substitute call.

(thanks to Quinn for pointing this out.)