forked from ldmud/ldmud
-
Notifications
You must be signed in to change notification settings - Fork 0
/
HISTORY
2461 lines (2277 loc) · 127 KB
/
HISTORY
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
This file lists all changes to the game driver which have a visible
impact on its behaviour both towards the mudlib as well as towards
the host system.
For a detailed list of all changes see the file CHANGELOG.
01-Oct-2023 (LDMud Team) -- 3.6.7
- Fixed Crashes:
+ Fixed a crash when accessing members of hidden structs.
+ Fixed a crash with foreach on a mapping range reference.
+ Fixed a crash when multiple 'reserve' modifiers were given
to #'catch in a lambda expression.
+ Fixed a crash when calling coroutines within an active trace().
+ Fixed crashes when cleaning up coroutines.
+ Fixed a crash when Python was accessing a swapped object.
+ variable_exists() could end up in an endless loop in certain
virtual inheritance scenarios.
- Language:
+ Added new type: lpctype
+ Added support for Python objects as LPC types.
+ Added 'limit' modifier for catch().
+ catch() is now considered to return a mixed value instead
of string.
+ Added --enable-keyword-in configure option to make 'in'
a reserved word.
+ Fixed that simul-efun structs were not found for inheritance.
- New Efuns:
+ compile_string() compiles LPC code given as a string into a closure.
- Changed Efuns:
+ closure_to_string() did not print the inherit's name for
inherited lfuns.
+ driver_info() provides more statistics on Python objects.
+ get_type_info(cl, 3) returned the wrong inherit.
+ save_value()/save_object() misformatted Python objects.
- Networking:
+ Allow specifying a host address for each listening port.
- Portability
+ Adapted to OpenSSL 3.
+ Adapted build scripts to Autoconf 2.71.
- Other:
+ Added Python support for the full LPC type system.
+ Added Python hooks for the signals SIGINT, SIGTERM, SIGHUP, SIGUSR1
and SIGUSR2.
+ Release Python's GIL when not executing Python code.
+ Added configuration option --disable-allocator-wrappers to disable
using LDMud's memory management functions in 3rd party libraries.
10-Sep-2022 (LDMud Team) -- 3.6.6
- Fixed Crashes:
+ Fixed a crash in configure_interactive() and input_to()
checking privileges without an actual living object.
+ Fixed several crashes in lambda().
+ Fixed a crash when compiling wildcard calls.
+ Fixed a crash in Python code with a missing current object.
+ Fixed a crash in Python code when handling a swapped-out object.
+ Fixed a crash when calling nonexistent functions on LWOs.
+ Fixed a crash when swapping LWOs.
+ Fixed a crash when aborting a coroutine due to an error.
+ Fixed a crash during the garbage collection.
+ Fixed a crash when calling MySQL functions.
- Language:
+ Introduced 'struct mixed' as type declaration for any struct.
+ Introduced range indexing for wide mappings
(i.e. m[key, index1..index2])
+ Implemented inheritance modifier and default declaration for
struct visibility.
+ Simul-efun structs are now available in every program.
+ Added new privileged pragma no_simul_efuns to deactivate the
access to simul-efuns.
+ Fixed object and lwobject type being treated as equal.
- Runtime:
+ Implemented runtime type checks for struct initialization.
+ Several fixes and changes for lightweight objects:
+ Introduced driver hooks for object creation.
+ Variables of a new object will be initialized prior to
their values being copied or restored.
+ nosave variables will not be saved anymore.
+ Fixed a failure when restoring.
+ Fixed several reference counting issues and other memory leaks.
- Changed Efuns:
+ ed() shows Unicode characters now.
+ unique_array() does not warn about missing functions anymore.
+ symbol_function() now supports simul-efun closures with high indices.
+ regexp() can now handle nul bytes in the regular expression.
+ driver_info() got some more statistics about simul-efuns, lightweight
objects and coroutines.
- Networking:
+ Added code for TLS and MCCP to the telnet example.
- Master:
+ H_CREATE_* hooks can now be arbitrary closures.
- Other:
+ Implemented encoding suffixes //IGNORE and //REPLACE for
error handling during reading.
09-Jan-2022 (LDMud Team) -- 3.6.5
- Fixed Crashes:
+ Fixed a crash in implode() with bytes.
+ Fixed a freeze when handling default function argument values.
+ Fixed crash when having more than 255 lambda values.
+ Fixed crash in virtual inherit handling (#899).
+ Fixed crash on too many local variables (#900).
- Lanuage:
+ Added new type: lightweight objects
+ Added new type: coroutines
+ Implement named object types (#842).
+ Implemented 'in' operator for membership tests (#726).
+ Improved missing return detection (#332).
+ Implemented dead code detection.
+ Implemented type checks for comparison operations.
+ Warn about floats used in a boolean context (#780).
+ Warn about incorrect definitions of applied lfuns (#882).
+ Warn about unused literal values.
+ Index operation cannot be called like efuns anymore.
+ Fixed refcounting mismatch when a virtual function disappeared.
- Runtime:
+ Removed argument for create() and reset().
+ Warn when a callback function does not exist.
+ Implemented closures to simul-efuns that exceeded the sefun table.
(#782)
+ Prevent reentrant SQLite calls.
+ Implement recursion limit in traditional regexp engine.
- Changed Efuns:
+ clone_object(): Pass additional arguments to create().
+ read_bytes() accepts now negative start offsets beyond file start.
+ restore_value()/restore_object(): Fixed parsing of context closures.
+ sprintf(): Fixed newline handling in column mode (#529).
+ sprintf(): Fixed handling of '%%' (#665).
+ sprintf(): Fixed handling of '\0' (#800).
+ sprintf(): Treat '\r' in table mode as line breaks.
- Networking:
+ Fixed discarding of newlines when switching to charmode (#892).
+ Fixed handling of Telnet NUL bytes.
- Master Object:
+ log_error(): New argument "line" containing the line number (#899).
- Other:
+ Python functions can amend LPC objects with additional member
variables.
06-Apr-2021 (LDMud Team) -- 3.6.4
- Fixed Crashes:
+ Assertion failure when adding string contants to byte constants.
+ Fixed a crash when a virtual inherited program was updated twice.
+ Fixed out-of-bounds write on errors in lambda closures.
+ lambda() compiled #'catch and #'call_direct without the needed
argument frame.
+ Python call operator on uninitialized closure could crash.
+ variable_list() failed to swap the variable block in when the
values were requested.
- Language:
+ Function arguments can now have default argument values.
+ Added prefixes #'lfun:: and #'var:: for closure literals.
+ Preprocessor statements and pragmas need now to be written fully.
+ Warn about trailing characters in all preprocessor statements.
+ A for/foreach variable cannot be used in its initializer anymore.
+ Added compile and runtime type checks for foreach().
+ Added compile and runtime type checks for all types of assignment
operations.
+ Inherited function calls will no longer call indirectly inherited
virtual programs.
+ Check efun arguments for references.
+ Extended function overload type checks to include optional
arguments.
+ Fixed type comparison of arrays with different depths.
+ Structs in a privately inherited program are now still visible in
the directly inheriting program.
- Runtime:
+ Added subtraction of mappings from arrays and vice versa.
+ Failed assignments to mapping entries will not leave a zero entry.
+ Fixed int *= float operation.
+ Fixed a resource leak for interactive connections.
+ Fixed a memory leak when an object is destroyed in __INIT.
+ Fixed use after free in get_type_info() for anonymous structs.
- Changed Efuns:
+ get_type_info(x,0) will now return the numeric type as documented.
+ interactive_info() now also gives noecho and charmode information.
+ map()/filter() got support for Unicode strings and byte sequences.
+ regexplode() will not split UTF-8 sequences anymore.
+ replace_program() can now handle virtual inherits.
+ restore_object() can now correctly handle quoted arrays.
+ sscanf() and parse_commands() are now real efuns.
+ sscanf() will not match upon numeric overflows.
+ struct_info() and variable_list() now return type information
once again.
+ symbol_variable() returned wrong value when called as a closure.
+ to_struct() now accepts arrays that are greater as the template
struct.
- Other:
+ Fixed missing security check in debug_info() simul-efun
implementation.
+ Added support for password protected TLS keys with the
--tls-password command line option.
+ Disallow the use of simul-efun closure literals when compiling
the master object.
+ Implemented Python bool operator for objects and closures.
+ Fixed Python hash operator on closures.
+ Pass SQLite warnings to the master object.
01-Sep-2020 (LDMud Team) -- 3.6.3
- Fixed Crashes:
+ slaballoc/smalloc forget to set the magic bytes when splitting
of a small block from a large block.
+ When printing collected garbage blocks the access to malloc
information was off by one word.
+ The compiler left a semantic value uninitialized when parsing
lvalue preserving calls.
+ The current object was not set when setting up the call to
H_CLEAN_UP.
+ to_struct() freed a struct definition when base and derived struct
had the same size.
+ The Closure() constructor in Python crashed when used in the backend
loop.
- Language:
+ The new pragma warn_unused_variables will warn about variables that
are not read from or not written to.
+ The pragma strict_types will now raise errors.
- New Efuns:
+ text_width() returns the approximate screen width of a given string.
- Changed Efuns:
+ sprintf() and terminal_colour() respect extended grapheme clusters.
+ restore_value() and restore_object() restore structs now by struct
member name when the names are available.
+ restore_value() and restore_object() can now restore anonymous
structs.
+ baseof() and to_struct() now detect or convert structs that are
based on an older or newer definition.
+ regexp() didn't handle the star operator correctly.
+ regexp() now supports \X (grapheme cluster) for traditional regular
expressions.
- Other:
+ Implemented support for lvalues in Python.
28-Apr-2020 (LDMud Team) -- 3.6.2
- Language:
+ Added the dot operator as a shortcut to call_strict() and
strict struct member access.
+ Modified the arrow operator to be a relaxed struct member
access operator.
+ Reimplement pragma strict_types.
+ Calls to simul-efuns are now type checked.
- New Efuns:
+ call_strict() and call_strict_direct() are similar to
call_other()/call_direct(), but raise an error if the
function does not exist.
- Changed Efuns:
+ call_resolved() and call_direct_resolved() now also support
array calls.
- Other:
+ Implemented support for function and variable inspection and
child processes in Python.
+ Fix information leakage when snooping.
08-Jan-2020 (LDMud Team) -- 3.6.1
- Runtime:
+ Assignments to variables and declarative type casts are
now subject to the runtime type checks.
- Language:
+ Argument types of efuns with arbitrarily many arguments
are now checked at compile time.
+ Type annotations of Python efuns are used for checks at
compile time and runtime.
+ Warn on C style casts that have no effect.
+ A variable cannot be used in its initializer anymore.
- Other:
+ Added support for closures and symbols in the indent tool.
+ Added valgrind memcheck instrumentation to the slaballoc
allocator.
28-Oct-2019 (LDMud Team) -- 3.6.0
- Removed Efuns:
+ The efun convert_charset() was removed, the new efuns
to_text() and to_bytes() can be used instead.
- Runtime:
+ The string type and all its operation support the full
Unicode character set (#432).
+ sl_exec() supports blobs now.
- Language
+ Introduced a new type named 'bytes' to differentiate between
Unicode character sequences (strings) and byte sequences.
05-Apr-2019 (LDMud Team) -- 3.5.2
- Fixed Crashes:
+ Syntax errors when parsing inline closures didn't clean
up status variables (#866).
+ Destructing newly created interactives resulted in fatal errors.
+ Calling lambda closures with mapping index operations resulted
in execution of random bytes (#867).
+ #'return in a middle of an expression in a lambda closure could
result in a fatal error (#868).
+ Replacing the system malloc could result in a segmentation fault
(#862).
+ A garbage collection when using the slaballoc/smalloc allocator
with mmap could result in a fatal error.
- Runtime:
+ Clean-up, reset and swap times can now be configured at runtime
using configure_driver().
+ Reactions to the signals SIGINT, SIGHUP, SIGUSR1 and SIGUSR2 can
now be configured using configure_driver().
04-Jan-2018 (LDMud Team) -- 3.5.1
- Fixed Crashes:
+ missing type declarations resulted in a NULL pointer dereference
(#859).
+ fixed handling of program updates with triply virtually inherited
programs.
+ fixed crash when swapping out programs with lvalue references (#854).
+ fixed a crash on exceptions in a call of Python efun closures.
+ compiling a call to Python efuns resulted in an uninitialized type.
+ SQLite crashed when LDMud's allocator replaced the system malloc.
- Runtime:
+ sl_exec() allows the ATTACH statement now.
+ SQLite log messages are now printed to the debug log (#835).
- Other:
+ Corrected simul-efun implementations of deprecared efuns (#855, #857).
+ Corrected the LP-245 mudlib to work with the current driver.
04-Oct-2017 (LDMud Team) -- 3.5.0
- Fixed Crashes
+ xml_generate(), xml_parse() could crash the driver due to a wrong
order during initialization of libxml2 (#671) and could lead to
memory corruption, because the memory used by libxml2 was subject to
the garbage collector and would be free'd by it while still in use.
+ get_type_info() lost refcounts to the function name of a closure,
causing it eventually being free'd prematurely (#712).
+ 'dumpallobj' crashed if there are strings with 0 refcounts (#725).
+ fixed a crash during tracing caused by a wrong call to add_message()
in do_trace(), when compiled with --enable-debug (#736).
+ sprintf() could result in a fatal error if some buffer overflowed.
Removed these overflow opportunities (#825).
+ fixed a crash during compilation when the handling of a preprocessor
statement meet the end of the lexer input buffer (#833).
+ fixed a crash in crypt() when given an invalid salt.
+ fixed a crash when calling ctime(-1) the first time.
- Changed Efuns:
+ apply() now expands an lvalue reference to an array or an array range
as lvalue references to the array elements.
+ add_action(): The function can be given as a closure. (#243)
+ call_other() and call_direct() now always accept an array of objects or
strings (object names) as argument and call the function in all of these
objects.
+ command(): Won't throw an error anymore when a static function
in another object is called. Such an action will simply be skipped.
+ get_dir(): prepend '/' in plain mode for entries in the root directory,
if paths are requested by GETDIR_PATH.
+ explode() always returns a non-empty array, even upon explode("","")
(#180).
+ net_connect() will return an error code from comm.h instead of
the system errno value (#427).
+ net_connect() had the current udp port as an undocumented default value
for its second argument. Now both parameters are mandatory.
+ object_info() was redesigned to just return a single information including
configuration options from configure_object(). (#596)
+ The functionality of shadow(ob, 0) was removed in favor of
object_info(ob, OI_SHADOW_NEXT). There is a sefun implementation with
the old signature in /mudlib/deprecated/. (#596)
+ restore_object()/restore_value() can now restore null bytes in strings.
+ sort_array() will sort in-place instead of a copying the array first,
if the array is passed as reference. (#224)
+ sort_array() and reverse() also work with array range references.
+ to_struct() can convert a struct into another one if one of them is
a (indirect) base of the other. (#646)
+ restore_object() checks if the types of restored data are compatible
with the declared types of variables, if runtime type checks are
enabled in the program of the object.
+ clone_object() does not deactivate an active heart_beat in a
blueprint. (#747)
+ Fixed result of convert_charset(): returns now the unchanged string
if it gets an empty string for conversion. (#739)
+ tls_init_connection() supports outgoing connections also with GnuTLS.
- Removed Efuns:
+ The deprecated efuns cat() and tail() were removed. They can be
easily and more flexibly replaced by sefuns, which are supplied with
the driver. (#637, #228)
+ The efun set_light() was removed. This includes the internal light
state managment in the driver. The mudlib does a better and more
flexible job at managing light in/from objects. (#775)
+ The supporting efuns for alists were removed: insert_alist, order_alist,
intersect_alist, assoc. (#776)
+ strlen() was removed. sizeof() can be used as a drop-in replacement, which
does exactly the same thing. (#798)
+ The following efuns were removed in favor of new efuns.
There are sefun replacements in /mudlib/deprecated/. (#596)
set_heart_beat() -> configure_object(ob, OC_HEART_BEAT, flag)
enable_commands() -> configure_object(ob, OC_COMMANDS_ENABLED, 1)
disable_commands() -> configure_object(ob, OC_COMMANDS_ENABLED, 0)
seteuid() -> configure_object(ob, OC_EUID, euid)
query_once_interactive() -> object_info(ob, OI_ONCE_INTERACTIVE)
query_shadowing() -> object_info(ob, OI_SHADOW_PREV)
set_connection_charset() -> configure_object(ob, IC_CONNECTION_CHARSET_AS_STRING, val)
configure_object(ob, IC_CONNECTION_CHARSET_AS_ARRAY, val)
configure_object(ob, IC_QUOTE_IAC, 1 resp. 0)
get_connection_charset() -> object_info(ob, IC_CONNECTION_CHARSET_AS_STRING)
object_info(ob, IC_CONNECTION_CHARSET_AS_STRING)
object_info(ob, IC_QUOTE_IAC)
set_combine_charset() -> configure_object(ob, IC_COMBINE_CHARSET_AS_STRING, val)
configure_object(ob, IC_COMBINE_CHARSET_AS_ARRAY, val)
get_combine_charset() -> object_info(ob, IC_COMBINE_CHARSET_AS_STRING)
object_info(ob, IC_COMBINE_CHARSET_AS_STRING)
set_buffer_size() -> configure_interactive(ob, IC_SOCKET_BUFFER_SIZE, size)
enable_telnet() -> configure_interactive(ob, IC_TELNET_ENABLED, state)
start_mccp_compress() -> configure_interactive(ob, IC_MCCP, state)
end_mccp_compress() -> configure_interactive(ob, IC_MCCP, 0)
query_mccp() -> interactive_info(ob, IC_MCCP)
query_mccp_stats() -> interactive_info(ob, II_MCCP_STATS)
set_prompt() -> configure_interactive(ob, IC_PROMPT, prompt)
set_max_commands() -> configure_interactive(ob, IC_MAX_COMMANDS, num)
get_max_commands() -> interactive_info(ob, IC_MAX_COMMANDS)
set_modify_command() -> configure_interactive(ob, IC_MODIFY_COMMAND, ob)
query_ip_name() -> interactive_info(ob, II_IP_NAME)
interactive_info(ob, II_IP_ADDRESS)
query_ip_number() -> interactive_info(ob, II_IP_NUMBER)
interactive_info(ob, II_IP_ADDRESS)
query_editing() -> interactive_info(ob, II_EDITING)
query_idle() -> interactive_info(ob, II_IDLE)
query_input_pending() -> interactive_info(ob, II_INPUT_PENDING)
debug_info() -> driver_info(...)
dump_driver_info(...)
objects(...)
query_limits() -> driver_info(DC_DEFAULT_RUNTIME_LIMITS)
driver_info(DI_CURRENT_RUNTIME_LIMITS)
set_limits() -> configure_driver(DC_DEFAULT_RUNTIME_LIMITS)
set_extra_wizinfo_size() -> configure_driver(DC_EXTRA_WIZINFO_SIZE)
query_load_average() -> driver_info(DI_LOAD_AVERAGE_COMMANDS)
driver_info(DI_LOAD_AVERAGE_LINES)
query_mud_port() -> driver_info(DI_MUD_PORTS)
interactive_info(ob, II_MUD_PORT)
query_udp_port() -> driver_info(DI_UDP_PORT)
query_snoop() -> interactive_info(ob, II_SNOOP_NEXT)
+ The efun set_is_wizard() was removed. It can be implemented with
normal actions. Example implementations are provided in
/mudlib/deprecated. (#596)
+ The efun export_uid() was removed. The object's UID is now constant
and can't be changed. Instead the EUID can be exported with
configure_object(ob, OC_EUID, geteuid()). (#828)
- New Efuns:
+ json_parse() parses strings encoding a JSON object into an
appropriate LPC value. (optional efun)
+ json_serialize() converts a LPC value into an JSON object and
serializes it as LPC string. (optional efun)
+ configure_object() sets options for given objects. (#596)
+ interactive_info() and driver_info() return information about
interactive objects resp. the driver and the LPC runtime. (#596)
+ dump_driver_info() dumps information to a file. (#596)
+ objects() returns an excerpt from the object list. (#596)
- Portability
+ Removed built-in PCRE package, because it was awfully out of date.
Since libpcre is installed on nearly every halfway POSIX compatible
system, we just link against the system libpcre. If there is none
available, no PCREs are available in the driver (#658).
+ Removed a bunch of checks and own fall-back implementations for
functions required by C89/90/99 or POSIX.1. We just require them.
+ The data from the bytecode is not written/read byte per byte and
combined by shifting and masking anymore, but by reading the
specific type directly. This should not have endianness issues, as
long as compiled bytecode is not transferred to a different machine.
But Alignment issues may arise on some system.
+ The bytecode uses fixed-size integer types from C99.
+ Entities in the bytecode are getting their semantic types (like
bc_offset_t).
+ Take more care of issues with different width of integers in the
bytecode (e.g. long was regarded as 32 bit until now).
+ Improved detection of working sbrk/brk() and malloc replaceability.
Enabled the possibility to replace malloc while using mmap()
independently of the old SBRK_OK. (#680)
- Runtime
+ re-worked and consolidated hash functions and hash types. (#564)
+ re-worked string hashing to use dedicated hash types and MurmurHash2.
This is about 5 times faster than our old hashing algorithm and
supports hashes with more than 16 bit width. This supports larger
hash tables than 65535.
+ The ptmalloc memory allocator was removed. (#552)
+ The interpreter checks for the correct types of function arguments
upon function calls, if runtime type checks are enabled for the
program defining the function (and save_types is used as well).
(experimental feature)
+ The intrepreter checks for the correct type of return values when
returning from a lfun or sefun, if runtime type checks are enabled
for the program defining the function (and save_types is used as
well). (experimental feature)
+ When the driver receives SIGTERM, SIGINT, SIGHUP, SIGUSR1 or SIGUSR2
it calls handle_external_signal() in the mudlib master. If the master
does not handle the signal, the driver defaults back to the standard
behaviour.
+ Heartbeats were called only when players are logged on. They are now
called regardless of logged-on players.
However, the mudlib can activate/deactivate the calls to heartbeats
globally by using configure_driver(). (#731)
+ Improved the determination of the drivers current_time which fixes
issues with wrongly timed heart_beats or apparantly wrong timings.
(e.g. #743)
+ A profiling feature for detecting long executions was introduced. It
can be configured with configure_driver().
+ Redefined structs (by re-compiling its program) are now always
considered compatible. (#838)
- Language
+ Added a sefun:: specifier to explicitly call simul-efuns. (#669)
+ structs are always enabled. (#557)
+ 'new' inline closure are always enabled. (#557)
+ Added three new pragmas:
'rtt_checks', which will enable type checks at runtime.
'warn_rtt_checks', which will only give warnings on type checks.
'no_rtt_checks', which disables runtime type checks.
+ A base struct is recorded as base struct in a child struct even if
the base struct has no members. (#695)
+ The behaviour of the pragmas combine_strings, verbose_errors and
local_scopes are mandatory. These three pragmas plus their no_*
variants are ignored.
+ The pragma warn_deprecated is no enabled by default.
+ A new modifier 'deprecated' can be used to mark lfuns, sefuns and
global variable as deprecated. Using/Calling them will cause
warnings.
+ 'float' variables on LP64 architectures (64 bit) now have the same
precision as 'double' in C (the driver uses internally 'double'
instead of the traditional self-built format).
+ Implemented union types. (#721)
+ Private prototypes are now invisible in the inheriting program.
+ Programs that are virtually inherited twice will always exist
only once, updating an older program if necessary. (#233)
+ Visibility modifiers are not combinable anymore. (#771)
+ Added a new modifier: visible (which is the default visibility).
+ Many restrictions for lvalue refrences (&var, &(arr[i]),
&(arr[i1..i2])) were lifted:
- They are not limited to the original variable's scope.
Therefore they can be returned from a function or passed
to a call_out.
- For this reason the error message "Can't trace reference
assignments." doesn't exist anymore.
- A range can be indexed again, so it can be used as an array
replacement.
- Multiple char references to the same string are allowed.
Lvalue references are automatically dereferenced when they
are not used as the left hand side of an expression without
the '&' operator.
Variables that contain an lvalue reference can be 'reseated',
i.e. change their value without changing the lvalue they reference:
&var = new_value_or_reference;
- Networking
+ UDP datagrams with lengths up to 65507 (including UDP and IPv4
headers: 65535) bytes are supported.
+ TLS: Use 2048 bit wide DH parameters per default. (#845)
+ TLS: Disable weak ciphers/hashs (DES, 3DES, RC4, MD5) and
protocolls (SSLv3). (#847)
+ TLS: DH parameters can be set with configure_driver(). (#846)
+ TLS: Allowed ciphers can be set with configure_driver(). (#849)
- Other
+ The driver requires a C99 compatible build system. Some checks and
work-arounds for non-C99 were removed.
+ A bunch of statistic counters (string handler, object table, swapper,
network layer,...) were changed to a larger type to prevent them from
overflowing. (#521, #608)
+ Renamed some command-line flags to match the LPC defines better (#704)
--heart-interval -> --heart-beat-interval
--sync-heart -> --synchronous-heart-beat
--async-heart -> --asynchronous-heart-beat
--no-heart -> --no-heart-beat
+ A new savefile format (version 2) was added to store the new 'double'
floats losslessly. It additionally is simpler to write/restore and
makes the savefiles more compact because only one representation of
the float value is stored.
+ A further savefile format (version 3) was added to store lvalue
references.
+ Added --tls-keydirectory command line option to specify a multiple
TLS keys to choose from with configure_driver(DC_TLS_CERTIFICATE).
+ Added the pkg-python package to allow definition of efuns in Python.
+ The special driver actions ('status', 'malloc', dumpallobj'
and 'opcdump') were removed. They can be implemented as normal
actions. Example implementations are provided in
/mudlib/deprecated/set_is_wizard.c (#596).
30-May-2009 (LDMud Team) -- 3.3.719
- Fixed Crashes:
+ gmtime(), localtime(), ctime() and strftime() could crash the driver
on platforms where time_t is 64 bits long and users supply huge
values as time stamp (>2^55) due to unchecked results from libc
functions (Bug #587).
+ Fixed a bug in esbrk() during memory allocation, where SINT
(sizeof(word_t)) was not taken into account in the calculation of a
block size, leading to crashes afterwards. (#611)
- New Efuns:
+ configure_interactive(): To set options for interactives.
+ configure_driver(): To set settings/options for the driver itself.
- Changed Efuns:
+ idna_stringprep(): fixed the evaluation of the arguments and removed
a memory leak (#498).
+ map(): it's now possible to specify a mapping column when mapping
through mappings (#367)
+ tls_check_certificate(), tls_refresh_certs(): Now available if
GnuTLS is supported.
+ hash() and hmac() is now always available und is able to use OpenSSL,
libgcrypt or internal MD5 and SHA1 routines (builtin routines for
hash() only). hash() costs 10 ticks per iteration.
+ md5() and sha1() are obsoleted by hash().
+ lambda() now supports bound and unbound lambdas as the first element
in an array of a lambda expression.
+ xml_generate(), xml_parse(): Also available using libxml2.
+ cat(): marked as deprecated (#637)
- Runtime
+ The --max-malloced memory limit was renamed to --hard-malloc-limit.
+ Introduced new --soft-malloc-limit in addition to the hard one.
+ When exceeding the soft memory limit, the function low_memory() is
called in the mudlib master with details about the kind of low memory
situation. This check is done during the backend cycle and not at
'real-time'.
+ Made the maximum length of commands configurable at compile-time
(MAX_COMMAND_LENGTH, --max-command-length)
+ The driver hook H_MSG_DISCARDED can be used to specify the messages
given to players when their messages were discarded.
+ The soft and hard memory limits can now be configured at runtime
(configure_driver()).
- Language
+ Added a permanent define __MAX_COMMAND_LENGTH__ for the maximum
length of command.
+ Added a permanent define __GCRYPT__ when libgcrypt support is
available.
- Portability
+ Savefiles are written in binary mode, if the host system supports any
such notion (O_BINARY exists). Additionally, they are read as binary
as well, if it is supported. (Note: POSIX conforming systems do not
distinguish between 'text' and 'binary' modes, this is only relevant
to Cygwin.)
+ Fixed a major bug on 64 bit platforms, where floats with negative
exponents were saved incorrectly leading to data corruption (#627).
+ Removed the whole hosts/ directory because it wasn't maintained for
a long time and most of the systems were anyway dead for a long
time (#625).
This removed --enable-use-system-crypt as well (#624).
+ Removed checks and special code for OS2 and __EMX__.
+ Removed checks and special code for MSDOS.
+ Removed checks and special code for BeOS.
+ Removed checks and special code for AMIGA.
+ Removed checks and work-arounds for very old gcc compilers
(2.x, <3.2).
+ Removed checks and special code for SunOS4
+ Removed checks and special code for Ultrix.
+ Removed MSDOS filesystem semantics (Checks for MSDOS_FS and special
behaviour (e.g. \\ as path separator).
+ Support for using mmap() to get memory from the system (slaballoc),
because brk()/sbrk() are more or less deprecated and not supported by
some systems (e.g. Darwin/MacOS). (#640)
+ Support for using mmap() to get memory from the system (smalloc).
(#640)
- Other
+ Generalized the write buffer for non-threaded use and renamed the
configuration option '--with-pthreads-write-max-size' to
'--with-write-buffer-max-size'.
+ Removed background threads that sent the data to the network
and with it the '--enable-use-pthreads' configuration option.
+ The commandline options '--access-file' and '--access-log'
specify the access permissions and log file, activating or
deactivating access control and log. The old configure options
'--enable-access-control', '--with-access-file', '--with-access-log'
and their config.h symbols ACCESS_FILE and ACCESS_LOG just give
the default values.
+ The default path of TLS certificates are now configurable during
compile time (--with-tls-keyfile, --with-tls-certfile,
--with-tls-trustfile, --with-tls-trustdirectory, --with-tls-crlfile,
--with-tls-crldirectory), these TLS features can also be deactivated
by giving "no" during compile time or "none" as a runtime parameter.
+ Ed sessions are removed when an object becomes non-interactive.
+ Multiple ed sessions per interactive are allowed.
+ Check the compiler for support of -fwrapv and enable if supported.
Enables a fully defined overflow/wrap behaviour of signed integers
(#635)).
12-Jan-2009 -- 3.3.718
- New Efuns:
+ mktime(): convert a date/time information as returned by local_time()
to a unix timestamp (integer value).
+ strftime(): convert a timestamp to a formatted string using a format
string with a variety of format specifiers.
+ xml_generate(), xml_parse(): Optional XML support.
- Changed Efuns:
+ present_clone(): the efuns now optionally searches for the <n>th
object in <env> instead of the first one.
+ debug_info(): can be used to query the current stack control depth
with DIT_CURRENT_DEPTH (LPC recursion depth).
- Runtime:
+ random(): Uses now a new random number generator (SFMT) see below.
+ sprintf(): Can now print values larger than 2^32-1 if the driver is
compiled on 64 bit platforms.
- Fixed Crashes:
+ filter(), save_object(), restore_object(), send_erq(), send_udp(),
db_conv_string(), regexplode(), regexp(), process_string(),
present_clone(), load_object(), rename_object(), replace_program()
could crash the driver due to stack overflows, when large string were
used as arguments.
- Language
+ Disallowed case labels in inner blocks of switch statements
and variable declarations that cross case labels.
- Other
+ Exchanged the Mersenne Twister (pseudo random number generator) by
the SIMD-oriented Fast Mersenne Twister (SFMT) to support random
numbers up to 2^63-1 on 64 bit platforms.
http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/
Additionally, the period length can be configured now at
compile-time. The SFMT faciliates a better equidistribution and a
faster recovery from a 0-excess state as well. (Bug #527)
http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/
+ Added the possibility to seed the PRNG from arbitrary files or
devices by using the commandline option --randomdevice. The default
device is /dev/urandom. If that is not readable, the driver falls
back to seed the PRNG with the system time (Bug #515).
+ The driver dumps a core now even if the master object is not loaded.
+ New configuration option '--enable-eval-cost-trace' to show the
evaluation costs in the stacktrace.
10-Aug-2008 (Lars Duening) -- 3.3.717
- Changed Efuns:
+ md5(): The efuns costs 10 eval ticks per iteration (Bug #485).
+ sha1(): The efuns costs 10 eval ticks per iteration (Bug #485).
+ strrstr(): A starting position of the input string's length
led to the target string never being found (Bug #509).
- Compiler:
+ After two consecutive inline closures within the same
function, the line number information was incorrect (Bug #510).
+ Corrected an off-by-one linenumber error related to
auto-include strings (Bug #508)
- Other:
+ Improved the removal of actions added by shadows (Bug #514).
14-Oct-2007 (Lars Duening) -- 3.3.716
- Changed Efuns:
+ load_object(): The object name must not be empty (Bug #500).
- Fixed Crashers:
+ Size-changing mapping operations didn't fully check for destructed
objects as keys, sometimes derefencing invalid pointers in
the process (Bug #517).
+ Removed a crasher when running with --check-refcounts: References
by snooping non-interactives weren't counted (Bug #492).
+ Loading an object with an empty name twice could crash the
driver (Bug #500).
+ clone_object(): When initializing a clone's variables
using #pragma share_variables, really use the variables from the
blueprint object being given. This allows the handling of
inherited blueprint objects with replaced programs. (Bug #483)
+ An argument mismatch error during a lfun-closure call could
crash the driver. (Bug #495).
+ The definition 'struct abc abc;' could crash the driver. (Bug #494)
+ The use of local undefined structs as 'struct abc abc = (<abc>)'
could crash the driver. (Bug #493)
- Compiler:
+ The lfuns backing the inline closures are again 'private nomask'.
- Runtime:
+ foreach(int i: <num>) recognizes if <num> is negative and throws
an error. (Bug #503)
+ The handling of charmode with combine-charset could lead to
premature socket closing if present with longer data than the
input buffer could at one time. (Bug #442)
+ The Apply-Cache statistics counters should overflow less often
(Bug #520).
+ If a simul_efun object appears before being 'blessed', that
object is rejected to avoid variable/function inconsistency bugs.
(Bug #489).
- Other:
+ The autoconfiguration of YACC was incompatible with gentoo Linux.
+ Removed a few (partly fatal) 64-bit issues (Bug #490, #491).
+ Removed a memory leak when catching errors inside
master::runtime_error() (Bug #513).
30-Sep-2007 (Lars Duening) -- 3.3.715
- New Efuns:
+ tls_refresh_certs(): Reload the certificates and certificate
revocation information.
- Other:
+ New commandline options to handle certification revocations:
--tls-crlfile <pathname>
Use <pathname> as the filename holding your certificate revocation
lists. If relative, <pathname> is interpreted relative to
<mudlib>.
--tls-crldirectory <pathname>
Use <pathname> as the directory where your certificate revocation
lists reside. If relative, <pathname> is interpreted relative to
<mudlib>.
09-Jul-2006 (Lars Duening) -- Release 3.3.714
- New Efuns:
+ hash(): Available if OpenSSL is supported, this efun calculates
hashes for various methods.
+ hmac(): Available if OpenSSL is supported, this efun calculates
HMACs for various methods.
- Changed Efuns:
+ save_value(), restore_value(), save_object(), restore_object():
lfun closures are now saved with their inheritance path to
allow proper restoration under complex circumstances.
+ tls_check_certificate(): GEN_DNS, GEN_EMAIL and GEN_URI
certificates are supported.
- Language:
+ <array> & <mapping> implements the intersection of the
array with the indices of mapping.
- Fixed Crashers:
+ Lfun closures now keep proper track of which program
they belong to.
+ Apply cache entries for non-existing functions could lead
to memory corruption as result of garbage collection.
- Compiler:
+ If a non-virtual baseclass was inherited multiple times
with a virtual class inside the inheritance tree, its members
were merged even though they shouldn't.
+ The type tracking was improved so that variable initializations
like 'int i = to_int( ({float})0 );' compile correctly.
+ New macros __OPENSSL__ and __GNUTLS__ offer insight as to
which TLS package is being used.
- Other:
12-Mar-2006 (Lars Duening) -- Release 3.3.713
- New Efuns:
+ sl_close(), sl_open(), sl_exec(), sl_insert_id(): Optional SQLite
support.
+ idna_stringprep(), idna_to_ascii(), idna_to_unicode():
Optional International Domain Name support.
- Changed Efuns:
+ function_exists(): The 'FEXISTS_ALL' result also contains
information about the function's type, flags, and number of
arguments.
+ present(): Modified the <n> search behaviour so that the
numbering is applied over both inventory and environment
together. Before, the numbering was individual in each
space, leading to situations where low-numbered objects in the
environment were hidden by those in the inventory.
+ sscanf(): The new modifier '+' requires the matching of
the characters after a field in order to consider the field
as matched.
+ tls_check_certificate(): Returns more informative results.
- Master Object:
+ disconnect(): The remaining input data is passed as the second
argument.
- Language:
+ Inherited private functions are now more invisible and
can cleanly be hidden by publich functions.
+ Simul-efuns can only be called when they are public. This
is to enable the construction of simul-efun objects via inheritance:
this way they can use protected functions internally without
having to make them available to everybody.
+ Preprocessor macro __SQLITE__ is defined if SQLite support is
available.
- Runtime:
+ The tracedepth was calculated incorrectly for efun closures
and callbacks.
+ Removing an interactive as part of a fatal comm error clobbered the
current object.
+ Removed the stipulation that CATCH_RESERVED_COST must be twice as
much as MASTER_RESERVED_COST, since the master reserve is used
automatically anyway.
+ Missing returns are logged at runtime only once per function
and occurance.
+ If the master:;connect() initiates a secure connection
which gets stuck in the handshake, neither logon() is called nor
is the prompt printed. Also, if the tls_init_connection() didn't
set a callback, the driver will provide a callback to logon().
This way logon() won't be called unless the connection is up
and running.
- Other:
+ The makefile is able to install the driver's LPC header
files as well.
24-Nov-2005 (Lars Duening) -- Release 3.3.712
- Changed efuns:
+ Removed obsolete and deprecated efuns: add_verb(), add_xverb(),
allocate_mapping(), copy_mapping(), efun308(), extract(), file_name(),
filter_array(), filter_mapping(), m_sizeof(), map_array(),
map_mapping(), mapping_contains(), member_array(),
set_auto_include_string(), slice_array().
+ catch(): If there is not enough time left (less than
__CATCH_EVAL_COST__), this is thrown as an error from inside
the catch instead of causing the catch to return 0.
+ catch(): Modifier 'reserve <expr>' can be used to specify a computing
reserve different from __CATCH_EVAL_COST__.
+ copy(), deep_copy(), get_type_info(), to_array(), to_string():
Added struct support.
+ add_action(): Historical usage with just one argument no longer
supported.
+ assoc(), insert_alist(), order_alist(), intersect_alist(): Optional
as package 'alists'.
+ call_out(): The minimum delay can now be 0, meaning: as soon as
possible.
+ debug_info(): Option DINFO_DUMP:"memory" to dump a list of
all allocated memory blocks (currently supported just by
smalloc).
+ debug_info(): Added more data to the option DINFO_DATA:DID_MEMORY
result.
+ debug_info(): DINFO_DATA:DID_ST_PACKETS_IN and DID_ST_PACKET_SIZE_IN
are the statistics for the incoming network traffic.
+ deep_inventory(): The result can be restricted to a certain
depth.
+ filter(): The efun can now filter strings as well.
+ function_exists(): now also returns the filename and
linenumber of a function.
+ garbage_collection(): An optional flag argument allows to change
the name of the default GC log file.
+ get_type_info(): The name of the defining program of a lfun or
context closure, or the function name itself can be returned.
+ map(): The efun can now map strings as well.
+ make_shared_string(): Deprecated.
+ member(), rmember(): The start position for the search can be
specified.
+ mkmapping(): Convert structs to mappings, too.
+ pg_*(): Postgres efuns trigger a privilege violation ("pgsql", "<efun
name>").
+ process_string(): Spaces are now allowed in function arguments
and no longer terminate the function specification.
+ regexp(), regexplode(): Optionally take RE interpretation options.
+ regexplode(): New flag RE_OMIT_DELIM allows to omit the matched
delimiters from the result.
+ send_erq(): ERQ callback closures can now accept the data as
a string instead of an array.
+ sprintf(), printf(): Formats %O and %Q print floats always
with a decimal point.
+ say(), tell_room(), tell_object(): The efuns can now take a mapping,
an object or a struct instead of an array to use with the
catch_msg() mechanism.
+ transfer(): Available (in compat mode) only when USE_DEPRECATED
is in effect.
+ unique_array(): The separator function can now be a closure,
and can also be given extra arguments.
+ wizlist_info(): Added the number of mappings to the result.
+ write_file(): Allowed to remove the file before writing.
- Corrected efuns:
+ restore_object(): An exception during the restore no longer has the
danger of leaking values and memory.