LDMud 3.2.11 - History
Contents:
Descriptions,
Changelog,
This page lists the full detailed history of the 3.2.11 version of LDMud.
- About .dev-716 = 3.2.11
- Efun
tell_object() can now take an array as second
argument, and will call lfun catch_msg() in the receiver.
This functionality is not exactly essential (as it boils down to
a call_other()), but brings tell_object()
more in line with tell_room() and say()
(Bug #0000354).
- About .dev-715
- Corrected the
snoop() manpage
(Bug #0000372).
- About .dev-713, .dev-714
- Corrected a compilation error when GnuTLS was used.
- Removing an interim pending input_to should no longer mess up
the telnet state (I hope!)
(Bug #0000363).
- About .dev-712
- Philip added a new efun
tls_check_certificate().
- About .dev-711
- Oops, the TLS change was premature. Normal operation isn't
affected, but I'll undo the change until a better solution
is available.
- About .dev-710
- TLS: When using OpenSSL, the session setup distinguishes between
a received connection, and one opened with
net_connect().
- About .dev-709
- Backported the TLS package from 3.3 - have fun prodding it!
- smalloc now checks that the large blocks don't exceed the size
range - unfortunately backporting the fix from 3.3 is not a
straightforward thing.
- About .dev-707
- Deep-copying a mapping with shared arrays as keys
(e.g.
([ arr, ([ arr ]) ]) )could cause
memory corruption due to the premature deallocation of an array
(Bug #0000351).
- About .dev-706
- Peng provided an improvement to the mySQL library configuration check
(Bug #0000343).
- About .dev-705
- Exceptions during a
unique_array() no longer leak
the internal structures
(Bug #0000345).
- About .dev-704
- Gnomi provided a patch to resolve a hanger in xerq
(Bug #0000342).
- About .dev-703
- Indexing a 0-width mapping actually returned a garbage value
(Bug #0000341).
- About .dev-702
- Last change wasn't quite enough: SuSE needed a different searchpath.
- About .dev-701
- Added another searchpath to the mySQL configuration detection, to
make it work on SuSE again.
- About .dev-700
- Quickie feature:
get_dir() can return access time
and mode masks.
- About .dev-699
- Added the settings file for TimeWarp.
- About .dev-698
- I (hopefully) improved the ability of the mySQL configuration
check to find the installed include files (Bug
#0000338).
- Efuns
to_string() and sprintf() now
print closures the same way, and operator closures are printed
in the correct notation.
- About .dev-697
- Small corrections to the documentation (Bugs
#0000333
and
#0000335
).
- About .dev-696
- Gnomi took the time to remove two implementation restrictions: it
is now possible to use preprocessor statements inside of inline
closures; and it is now also possible to use closures as mapping
keys.
- About .dev-695
- The mySQL efuns now raise a privilege violation ("mysql",
"efun name"). (Bug #0000318).
- About .dev-694
- Just corrections to manpages.
- About .dev-693
- Efun
input_to(): New flag INPUT_APPEND allows to queue
input_to()s.
- About .dev-692
- Another small correction to
to_int(): Too large negative
numbers are now mapped to INT_MIN, not just -INT_MAX. The LPC compiler
itself unfortunately can't be as clever, but at least now emits
warnings when encountering such numbers.
- About .dev-691
- The number parsing was not quite correct yet - Evermore no longer
booted with it in 3.3 (Bug #0000327).
- About .dev-690
- Numbers exceeding the numeric range limit ('111111111111111') are
now evaluated as MAX_INT (Bug #0000327).
- About .dev-689
- Assignments to negative sized ranges now throw an error (Bug #0000325).
- About .dev-688
- The driver now throws an error message if code tries to use lfun
or identifier closures as keys - these simply won't work with
the current implementation (Bug #0000324).
- About .dev-687
- The garbage collection now zeroes out closures found to be bound
to destructed objects. The old behaviour was to change them into
'undef' closures (Bug #0000322).
- About .dev-685
- Corrected the sending of UPD packets in the Amylaar erq.
- About .dev-684
- The LPC compiler now recognizes preprocessor statements within
inline closures and generates the proper error message (Bug #0000317).
- If privilege_violation() for input_to() and rename_object() destructs
the objects in question, the driver should no longer crash (Bug
#0000316).
- The Amylaar erq errorneously assumed fixed datalengths when
handling UDP packets.
- About .dev-682
- Corrected a memory leak when no-bang input_to()s are denied
by the master (Bug #0000143).
- About .dev-681
- Bugfix: The inherited-lfun closures broke the handling of virtual
superclasses.
- About .dev-680
- An organisational release: I have moved all old bug reports and
feature requests out of the driver archive into the bugtracker.
It might be faster for you to download the complete archive than
trying to apply this diff.
- A man page ldmud.1 is now generated from the driver's --longhelp
output if the tool (help2man) is available.
- About .dev-679
- Calls to explicitely inherited lfun closures (we need a better name
for these :-) ) weren't compiled correctly in
lambda()s
(Bug #0000145).
- About .dev-677
- Incorrect bytecode was generated for inline closures (Bug #0000144).
- About .dev-676
- Implemented closures explicitely referencing inherited functions
(
#'super::fun).
- About .dev-675
- Efun
net_connect(): On multi-homed machines, the created
socket is bound to the hostname given at program start (Bug #0000137).
- You will also have noticed that updates have been sparse over the
last weeks. But after having lived through a stressful production
release (it took three weekend-long attempts to get everything in
line), my geek enthusiasm at home was a bit subdued.
- About .dev-674
- I don't know that this was even supported, but
to_int()
now recognizes the plus sign again (as in to_int("+34")).
- About .dev-673
-
to_int() didn't recognize non-number strings and
returned garbage values (Bug #0000141).
- About .dev-672
-
to_int(): The base prefixes '0x', '0o' and '0b' are
supported.
- About .dev-671
- Efun
present() now accepts the argument form
(str, n) to allow for ids with embedded numbers.
- About .dev-670
- The NOECHO hook was called with the wrong number of arguments.
- About .dev-669
- Corrected a few build problems.
- About .dev-668
- To simplify the adaption of legacy mudlib code with its sloppy
handling of types, the pragma
no_warn_function_inconsistent can be used to
turn off warnings about inconsistent function redefinitions.
In general, however, turning off these warnings is a bad idea,
as they usually point to a violation of the function's calling
contract.
- About .dev-667
- When redefining variables from an inherited program, it is now
possible to redefine an inherited nosave variable with another
nosave variable (it will still generate a warning, though).
- Corrected the handling of pragma warn_deprecated when it comes
to affecting the code as it's executed at runtime (Bug #000059).
- Efun
shutdown() now can take an argument which
is used as the return code for the driver process.
- About .dev-666
- Corrected a compilation error (Bug #0000125).
- About .dev-665
- The new
input_to() flag INPUT_NO_TELNET
modifies the INPUT_CHARMODE behaviour such that
only the driver's handling of incoming data is adjusted.
- About .dev-664
- Bugfixes galore:
- Removed a couple of memory leaks (Bug #0000120).
- Using a too large fieldsize or precision in
sprintf()
could abort the driver due to a numeric overflow (Bug #0000119).
- Some operator closures didn't restore properly, and could even
confuse the restore-parser completely (Bug #0000118).
- When switching out of CHARMODE, the driver accidentally
discarded any pending input lines after the current one (Bug #0000123).
- About .dev-663
- Corrected the last patch, which caused the LPC compiler to generate
faulty bytecode.
- About .dev-662
- Removed a C99 construct which broke compilation under C90
compilers ... I hope (Bug #0000116).
- About .dev-661
- Calls from destructed objects to other objects now elicit
a warning (Bug #0000113).
- About .dev-660
- Corrected a number of memory leaks (Bug #0000114).
- About .dev-659
- Float variables without an initializer are now properly initialized
to float-0 instead of number-0.
- Corrected a nasty memory leak in MCCP - patch supplied by Alwin
(Bug #0000111).
- When objects are destructed, not all alien-lfun closures bound to
them were removed from the stack.
- About .dev-658
- An error while loading an object with a too-long filename could
cause a crash.
- Restoring non-existing (simul-)efun closures created illegal
closure values.
- About .dev-657
- The range given by the macros __FLOAT_MIN__ and __FLOAT_MAX__ was
too small (Bug #0000101).
- About .dev-656
- Removed a crasher in call_out().
- About .dev-655
- The traceback collection now uses unlimited arrays (Bug #0000097).
-
to_array('symbol) caused a crash
(Bug #0000097).
- An error in
save_{object,
value}() followed by a GC left behind an
invalid pointer (Bug #0000097).
- About .dev-654
- Corrections in the XERQ to make it more robust when used to start
subprograms.
- If an ERQ callback accepts an array, the numbers in that array
are now all positive in the range 0..255.
- About .dev-653
- Improved the verbose debugging of XErq.
- If a call-out function causes an error, all further call-outs for
the same user in this cycle are re-schedule to the next cycle.
This avoids a loop due to eval-cost resets then the function
causes a too-long-evaluation (Bug #0000095).
- About .dev-652
- Corrected a few memory leaks caused by runtime errors (Bug #0000096).
- About .dev-651
- Corrected a compilation error when MALLOC_TRACE was defined (Bug
#0000094).
- Warnings printed during the generation of a closure crashed the
driver (part of Bug #0000091).
- About .dev-650
- A too-large allocation (like in
" "*MAX_INT) no
longer crashes the mud unless done in SYSTEM allocation mode.
- Allocating an array enough elements to exceed the internal numeric
limits.
- About .dev-649
- A shadow executing
remove_action(1, shadowee)
crashed the driver.
- About .dev-648
- If a message or command is too long, the error messages prints the
begin of it as a debugging aid.
- About .dev-647
- The tracedepth wasn't calculated correctly.
- About .dev-646
- The LPC symbol
__MAX_MALLOC__ now reflects the actual
maximum allocation limit in effect, not the default value selected
during configuration.
- About .dev-645
- Efun
save_object() now really removes a trailing ".c"
from a filename.
- Efun
net_connect() should now compile with IPv6 enabled.
- (interpret.c) The efun tell_object() can now take an array as
second argument, calling catch_msg() in the target in that case
(Bug #0000354).
(Back to the top.)
- (doc/efun/snoop) Corrected the description of the return value (Bug
#0000372).
(Back to the top.)
- (pkg-tls.c, xalloc.h, smalloc) Removed compilation errors when using GnuTLS.
- (comm.c) The charmode/noecho mode is changed in remove_input_to()
only if the first pending input_to() is removed. Hopefully this
fixes Bug #0000363.
(Back to the top.)
- (pkg-tls.c) Philip provided a tls_check_certificate() efun.
(Back to the top.)
- (pkg-tls.c) My change was premature.
(Back to the top.)
- (comm) New interactive_t flag 'outgoing_conn' is TRUE for connections
openened by net_connect().
- (comm, pkg-tls.c) New interactive_t flag 'outgoing_conn' is TRUE for
connections openened by net_connect(). This is used by TLS (OpenSSL)
to set the proper state for the session.
(Back to the top.)
- (pkg-tls, other files) Backported the TLS support from 3.3 (Bug #0000357).
07-Feb-2005 (Lars Duening) (3.2.11-dev.708)
- (smalloc.c) If malloc() is used in esbrk(), and a block would exceed
the large block limit, the driver aborts with a proper error message.
Fixing this properly like in 3.3 would of course be nicer, but
unfortunately it would take another fine-combed pass through the
source as the 3.3 patch is not applicable.
(Back to the top.)
- (efuns.c) Deep-copying a mapping employing shared arrays as keys (e.g. ([
arr, ([ arr ]) ])) prematurely freed the copied array as the code
didn't keep track of the copied data itself, but of the svalues it was
stored in - and for mapping keys these svalues were local variables
(Bug #0000351).
(Back to the top.)
- (configure) Corrected the mySQL library check (Bug #0000346).
(Back to the top.)
- (array.c) Efun unique_array() no longer leaks memory if aborted
by an exception (Bug #0000345).
(Back to the top.)
- (util/xerq/erq.c) The erq didn't check if the calculated timeout
for the next select() had become negative. (Bug #0000342).
(Back to the top.)
- (mapping.c) Indexing a 0-width mapping returned pointers to memory outside
the mapping, causing weird crashes. The solution is to return pointers
to the global const1 (when found), or to a local svalue-0 instance
(when not found and a lvalue is requested) (Bug #0000341).
(Back to the top.)
- (configure) Added yet another path to the search for a mySQL installation.
(Back to the top.)
- (configure) Added another path to the search for a mySQL installation.
(Back to the top.)
- (mudlib/sys/files.h, files.c) Efun get_dir() can now return
access times and file modes (suggested by Mats).
(Back to the top.)
- (settings/timewarp) New settings file.
(Back to the top.)
- (configure, pkg-mysql.c) Adjusted the search for the mySQL include
files to allow for local installations (Bug #0000338)
- (closure, sprintf.c, interpret.c) to_string() and sprintf() now
print closures in the same format, and with more detail.
(Back to the top.)
- (main.c, doc/driver/invocation, INSTALL) Corrected the documentation
(Bugs #0000333 and #0000335).
(Back to the top.)
- (lex.c) Preprocessor statements inside of inline closures can now
be handled (thanks, Gnomi!)
- (mapping.c) Closures can be used as mapping keys (thanks, Gnomi!)
(Back to the top.)
- (pkg-mysql.c) Most mySQL efuns are now privileged as ("mysql",
"efun name") (Bug #0000318).
(Back to the top.)
- (doc/efun/m_values) Explained the lack of predictable order in the result
(Bug #0000329)
(Back to the top.)
- (comm.c, sys/input_to.h) The input_to() flag INPUT_APPEND allows
to queue input_to()s (suggested by Volker Behr).
(Back to the top.)
- (lex, efuns.c) Another small correction to the number parsing in to_int():
negative numbers exceeding the limits are properly mapped to INT_MIN,
not -INT_MAX. Unfortunately too large negative numbers seen by
the LPC compiler are still mapped to -INT_MAX due to the lack
of proper overflow handling in the compiler; however, the compiler
now emits a warning on these occasions.
(Back to the top.)
- (lex.c, interpret.c) The overflow checking in the number parsing routine
was overeager, causing Evermore to no longer boot. The checking
now really compares against the largest possible number, instead
of simply checking the sign (Bug #0000327).
(Back to the top.)
- (lex.c) The number parsing now recognizes overflows and forces these
numbers to be LONG_MAX (Bug #0000327).
(Back to the top.)
- (interpret.c) Assignments to negative-sized ranges now throw
an error (Bug #0000325).
(Back to the top.)
- (mapping.c) The driver now throws an error message when the code
tries to use lfun or identifier closures as keys (Bug #0000324).
(Back to the top.)
- (gcollect.c) Closures found to be bound to destructed objects are
replaced by 0s, not #'undef closures (Bug #0000322).
(Back to the top.)
- (erq/erq.c) The erq didn't quite use correct data lengths when sending UDP
packets, either (thanks, Tobias!)
(Back to the top.)
- (erq/erq.c) The erq errorneously assumed a constant data length
when receiving UDP packets (thanks, Tobias!)
- (lex.c) Preprocessor statements inside inline closures are now recognized
and rejected as implementation restriction (Bug #0000317).
- (comm.c, simulate.c) The driver didn't check if the privilege_violation()
called for input_to() or rename_object() destructed the object
in question (Bug #0000316).
(Back to the top.)
- (comm.c) Fixed a memory leak when no-bang input_to's were denied
(Bug #0000143).
(Back to the top.)
- (interpret.c) When calling inherited functions in objects with virtual
parents, the function adjusting the offsets always returned NULL
instead of the pointer to the parent. This was a fallout from the
closure change.
(Back to the top.)
- (Makefile.in, doc/man/ldmud.1) Added the automatic generation of a manpage
from the drivers '--longhelp' output.
- (src/bugs, src/done, src/wk) Moved the data from these directories
into the bugtracker.
(Back to the top.)
- (closure.c) Calls to explicitely inherited lfun closures weren't compiled
correctly in lambda()s (Bug #0000145).
(Back to the top.)
- (prolang.y) The LPC compiler produced invalid bytecode for inline
closures (Bug #0000144).
- (prolang.y) Corrected a compilation error if INITIALIZATION_BY_INIT was
not defined (reported by Steve).
(Back to the top.)
- (closure, gcollect.c, interpret.c, object, prolang) Implemented proper
closures explicitely referencing inherited functions.
(Back to the top.)
- (comm.c) Efun net_connect(): on multihomed machines the created
socket is bound to the hostname given with the --hostname option (Bug
#0000137).
(Back to the top.)
- (interpret.c) You learn a new thing every day: I never realized that
strtol() supports "+34" and similar - efun to_int() can now
interpret that again, too (reported by Bardioc).
(Back to the top.)
- (lex.c, interpret.c) Embarassing: the number parsing method assumed that the
string at least started with a digit - this broken to_int().
(Bug #0000141)
(Back to the top.)
- (interpret.c, lex) Efun to_int() now supports the '0x', '0b', and '0o'
bases (suggested by Steve Goucher).
(Back to the top.)
- (interpret.c, efuns) Introduced the (str, n) form for efun present()
(Bug #0000134).
- (smalloc.c) smalloc now supports allocations of 0 byte length (needed
to replace malloc()).
(Back to the top.)
- (comm.c) The NOECHO hook call specified only two arguments when
three were required (reported by Bardio and Steve G.).
(Back to the top.)
- (driver.h) Added a macro MIN() for those systems which don't have it.
- (port.h) Removed the unecessary cast from the ixopen definition.
(Back to the top.)
- (prolang.y, lex) New pragma (no_)warn_function_inconsistent to control
the handling of redefined functions which differ in return or argument
types. This is intended to easen the adaptation of legacy mudlib
code (suggested by Wayne).
(Back to the top.)
- (prolang.y) When checking the redefinition of inherited variables, do
allow the redefinition of static inherited variables with other
static variables (it will generated warning, though). Also the
equivalency of nosave and static was applied too late (reported by
Willem).
- (func_spec, efuns.c, main) Added an 'exit code' argument to the shutdown()
efun (Bug #0000129).
- (func_spec, interpret.c, prolang.y) The pragma warn-deprecated is now
expressed through a prefix bytecode where appropriate (Bug #0000059).
(Back to the top.)
- (prolang.y) Corrected a compilation warning (Bug #0000125).
(Back to the top.)
- (comm.c, simulate.c) Added new input_to() flag 'INPUT_LOCAL' to switch
only the driver side input mode between LINE and CHAR (Bug #0000124).
(Back to the top.)
- (interpret.c, actions.c, simulate.c) Removed memory leaks (thanks, Gnomi!)
(Bug #0000120).
- (sprintf.c) Too large fieldsizes or precisions are caught (Bug #0000119).
- (object.c) Some operator closures were saved using the wrong names, making
the restoration impossible. Also, restoring closures within arrays
wasn't robust enough (Bug #0000118).
- (comm.c) Clarified the warnings for input_to modechanges for objects
with telnet disabled (Bug #0000124).
- (comm.c) When switching out of CHARMODE, the driver accidentally
discarded any pending input lines after the current one. (thanks,
Gnomi) (Bug #0000123)
(Back to the top.)
- (prolang.y) The move of the PREPARE_INSERT() in the last patch caused
the driver to generate faulty bytecode.
(Back to the top.)
- (prolang.y) Removed a C99 construct which broke compilation on C90
compilers. I hope. (Bug #0000116).
(Back to the top.)
- (interpret.c) Calls from destructed objects to other objects
(including simul-efun calls) now elicit a warning (Bug #0000113).
(Back to the top.)
- (interpret.c) If a lambda was executed inside a catch() and threw an
error, the error routines didn't clean up the protective reference
held in current_lambda (Bug #0000114).
- (backend.c) A runtime error during a regreplace() closure would leak
the working buffer and the match buffer (Bug #0000114).
- (interpret.c) to_string(closure) leaked the closure (Bug #0000114).
- (ed.c) The 'M' command leaked the regular expression (Bug #0000114).
(Back to the top.)
- (prolang.y, interpret.c, func_spec) Float variables without initializer
are now properly initialized to float-0 instead of number-0 (reported
by Bardioc).
- (pkg-mccp.c) When ending a MCCP connection failed due to an error, the
zlib datastructures weren't deallocated (Bug #0000111, fix by Alwin).
- (interpret.c) When removing destructed objects from the stack, the code
missed alien-lfun closures bound to the object to be destructed,
regarding only alien-lfun closures defined in that object (Bug
#0000110).
(Back to the top.)
- (simulate.c) When printing a load-object error with a long filename,
the message is limited to the length of the error message buffer (Bug
#0000109).
- (simulate, xalloc.c) The length of the error message and error format
buffer are now given by two macros, to facilitate easier adaptation
of depending program segments.
- (simulate.c) When restoring closure values, make sure that the symbol
restored really exists (Bug #0000109).
(Back to the top.)
- (lex.c) The macros __FLOAT_MIN__ and __FLOAT_MAX__ now reflect
the limits for 'double' floats (Bug #0000101).
(Back to the top.)
- (call_out.c) When printing the uid for an object with an error, make
sure that there is an uid to print (reported by Bardioc).
(Back to the top.)
- (interpret.c)
to_array('symbol) crashed
the driver because it tried to free the symbol as a string (Bug
#0000097).
- (interpret.c) The trace collection into an array now uses unlimited
arrays, otherwise a too-small limit would cause the driver
to enter an endless error loop (Bug #0000097).
- (object, gcollect.c) If a
save_{object,
value}() failed and thus
left a pointer table behind, a following GC would free the table
without resetting the pointer. The next
save_{object, value}() would
then use the freed memory (Bug #0000097).
(Back to the top.)
- (xerq/erq.c) If select() in the main loop was interrupted by a signal,
the ERQ still proceeded to evaluate the fd-sets.
- (xerq/execute.c) The debug logging of the execute parameters didn't
work.
- (comm.c) If an ERQ callback function accepts an array, the numbers
are now all passed on positive (range 0..255).
(Back to the top.)
- (xerq/defs.h) ERQ_DEBUG level wasn't properly translated into
debug output.
- (xerq/socket.c) Added a few level 2 diagnostics.
- (call_out.c) If a call-out causes an error, all further call-outs for
the same user are re-scheduled to the next cycle. This is mainly
meant to stop run-away call-outs causing too-long-evaluations while
re-scheduling calls to themselves (Bug #0000095).
(Back to the top.)
- (interpret.c) Removed a number of memory leaks caused by
runtime errors during array operations which exceeded the max
array size (Bug #0000096).
- (comm.c) If input_to() wasn't given a valid prompt, it leaked
the memory for the internal input-to structure (Bug #0000096).
- (interpret.c) The bitstring operators would leak the memory for
the result if encountering an invalid bitpattern (Bug #0000096).
(Back to the top.)
- (array.h) The ALLOC_VECTOR macro was misdefined for MALLOC_TRACE (Bug
#0000094)
- (interpret.c) When printing a warning during the creation of in inline
closure, the global stack pointer was one too low (thanks, Gnomi)
(part of Bug #0000091)
(Back to the top.)
- (smalloc.c) If the allocation exceeds the numerical limits and the
allocation is not in MALLOC_SYSTEM mode, a simple diagnostic is printed
and the allocation fails. This way, an " "*MAX_INT won't crash
the mud. (Bug #0000086)
- (array.h) The array allocation now checks if the size of the requested
array exceeds the numerical limits (part of Bug #0000091)
(Back to the top.)
- (actions.c) Efun remove_action() didn't check if the sentence under
scrutiny is a true verb or a shadow sentence - this caused a crash
if a shadow object executed remove_action(1, shadowee) (Bug #0000080).
(Back to the top.)
- (comm.c, actions.c) On a too long message or command, print the
first 200 characters as debugging aid (Bug #0000078).
(Back to the top.)
- (interpret.c) The tracedepth was always increased, but only decreased
when traceing was active (#0000070)
(Back to the top.)
- (doc/efun/previous_object) Corrected to reflect actual behaviour (Bug
#0000073).
- (lex.c) The symbol __MAX_MALLOC__ is set to what is actually set
in the global 'max_malloced' and not just the configuration
value MAX_MALLLOCED (Bug #00069).
(Back to the top.)
- (doc/) Corrected a number of German manpages.
- (comm.c) net_connect() didn't compile with IPv6 (reported by Fini).
- (object.c) Contradicting the documentation, save_object()
did not strip a trailing '.c' from the given filename (reported by
Niflheim@Unitopia) (Bug #00000067).
(Back to the top.)
Last update: Tue, 12 Apr 2005 21:13:39 -0600