johnsonjh/duma

View on GitHub
CHANGELOG.md

Summary

Maintainability
Test Coverage
# Version History

<!-- toc -->

- **Unreleased**
  - [2.6xx](#26xx)
- **2021**
  - [2.5.21](#2521-2021-02-14)
  - [2.5.20](#2520-2021-01-04)
  - [2.5.19](#2519-2021-01-02)
- **2020**
  - [2.5.18](#2518-2020-12-18)
  - [2.5.17](#2517-2020-12-16)
- **2009**
  - [2.5.16](#2516-2009-06-14)
  - [2.5.15](#2515-2009-04-11)
- **2008**
  - [2.5.14](#2514-2008-04-27)
  - [2.5.13](#2513-2008-03-19)
  - [2.5.12](#2512-2008-01-25)
  - [2.5.11](#2511-2008-01-20)
  - [2.5.10](#2510-2008-01-15)
- **2007**
  - [2.5.9](#259-2007-12-23)
  - [2.5.8](#258-2007-08-19)
  - [2.5.7](#257-2007-08-17)
  - [2.5.6](#256-2007-08-15)
  - [2.5.5](#255-2007-08-11)
  - [2.5.4](#254-2007-07-31)
  - [2.5.3](#253-2007-07-15)
  - [2.5.2](#252-2007-07-12)
  - [2.5.1](#251-2007-07-08)
- **2006**
  - [2.5.0](#250-2006-07-01)
  - [2.4.28](#2428-2006-06-18)
  - [2.4.27](#2427-2006-04-23)
- **2005**
  - [2.4.26](#2426-2005-10-28)
  - [2.4.25](#2425-2005-10-21)
  - [2.4.24](#2424-2005-10-10)
  - [2.4.23](#2423-2005-10-08)
  - [2.4.22](#2422-2005-10-06)
  - [2.4.21](#2421-2005-09-29)
  - [2.4.20](#2420-2005-09-27)
  - [2.4.19](#2419-2005-09-20)
  - [2.4.18](#2418-2005-09-16)
  - [2.4.17](#2417-2005-09-10)
  - [2.4.16](#2416-2005-08-28)
  - [2.4.15](#2415-2005-07-24)
  - [2.4.14](#2414-2005-07-15)
  - [2.4.13](#2413-2005-02-11)
  - [2.4.12](#2412-2005-01-05)
  - [2.4.11](#2411-2005-01-03)
- **2004**
  - [2.4.10](#2410-2004-07-21)
- **2002**
  - [2.4.9](#249-2002-12-05)
  - [2.4.8](#248-2002-12-04)
  - [2.4.7](#247-2002-11-22)
  - [2.4.6](#246-2002-11-18)
  - [2.4.5](#245-2002-11-17)
  - [2.4.4](#244-2002-11-03)
  - [2.4.3](#243-2002-10-08)
  - [2.4.2](#242-2002-10-07)
  - [2.4.1](#241-2002-10-06)
  - [2.4.0](#240-2002-10-03)
  - [2.2.2](#222)
  - [2.2.0](#220)
- **1995**
  - [2.0.5](#205-1995-01-20)
- **1994**
  - [2.0.4](#204-1994-09-30)
- **1993**
  - [2.0.3](#203-1993-05-29)
- **1992**
  - [2.0.2](#202)
  - [2.0.1](#201)

<!-- tocstop -->

## 2.6xx

- Reformat banner and messages
- Update `SECURITY.md`
  - Clarify purpose of document, update, reformat, add _PGP_ details
- Reorganization of files in source tree
- Update shell scripts to improve styling (`shfmt`), tune redirection, add
  pedantic error checking, better POSIX compliance, and appease ShellCheck
- Update `GNUmakefile`
  - Support out-of-tree compilation
  - Remove `shar` target
  - Fix `dos2unix` target
  - Use C++98 compilation mode w/G++
  - Fix macOS X default installation prefix
    - Allow user to override default prefix
  - Update clean target to remove `core` and `a.out`
- Update `duma.c`: Adjust ordering of included headers
- New CMake build support
  - Generate `duma.sh` to use absolute path to installed shared library
  - Use C++98 standard mode if available
  - Explicitly request position independent code
- Fix compilation warnings with GCC 9.3
- Fix compilation on macOS X (ARM64 and Intel processors)
- Create _Attic_ for outdated / deprecated components
- Overhaul and consolidate documentation into `README.md`
  - Optimize for both web browser and plain-text viewing
  - Integrate `README.txt` and `INSTALL` information
- Normalize source code styling (`clang-format` + `uncrustify`)
- Convert `CHANGELOG` to Markdown
  - Normalize format, fix spelling, wording, add dates
  - Squash details of generated `CHANGELOG.md`
- Switch to `git-changelog` generated `CHANGELOG`

## 2.5.21 (2021-02-14)

- Update contact information and documentation
  - No functional changes

## 2.5.20 (2021-01-04)

- Typo fixes and build system updates
  - No functional changes

## 2.5.19 (2021-01-02)

- Build tests
- Other minor changes
- Updated shell scripts
- Fixed _Debian_ release info

## 2.5.18 (2020-12-18)

- Updated documentation

## 2.5.17 (2020-12-16)

- Updated `README` with extra history and information
  (2020-12-15, JJ)
- Added `SECURITY.md`: Add security policy and information for bug reporting
  (2020-12-15, JJ)
- Added `LICENSE`: Merged `COPYING-GPL` and `COPYING-LGPL`
  (2020-08-25, JJ)
- Updated `TODO` with items from 2009-12-30 by _Daniel Trebbien_
  (2020-08-25, JJ)
- Updated `TODO` with items from 2008-05-23 by _Michael Eddington_
  (2020-08-25, JJ)
- No longer build test programs (_for now_) to un-break static builds
  (2020-08-24, JJ)
- Applied various update patches from the _Buildroot Project_
  (2020-10-28, JJ)
- Applied a patch from _Swati Kumari_ for additional `NULL` checks
  (2015-07-30, JJ)
- Applied a patch for bug ID _3035145_ from _Reinhard Katzmann_
  (2010-07-26, JJ)
- Applied a patch for bug ID _2923784_ from _Daniel Trebbien_
  (2009-12-30, JJ)
- Applied a patch for bug ID _2923779_ from _Daniel Trebbien_
  (2009-12-30, JJ)
- Applied a patch for bug ID _2831348_ from an anonymous SourceForge user
  (2009-07-23, JJ)

## 2.5.16 (2009-06-14)

- Add `memmove()` implementation based on `memove()` from `klibc` by _Andris Zeila_:
  <http://sf.net/tracker/?func=detail&aid=2792252&group_id=149725&atid=775376>
  (2009-05-21, HA)
- Fixed "_Broken build in MSYS_" and "_C++ tests fail_"
  - Fixed `USE_WIN32_CRIT_SECT` implementation in `sem_inc.c`
  - Added _make_ section for `OSTYPE=msys-sh`, which uses _mingw32-gcc_ / _G++_
- Use `USE_WIN32_CRIT_SECT` implementation for _Cygwin_, fixes `testoperator`
  (2009-05-23, HA)
- Remove CVS sub-directories from packaging
- Remove `debian` sub-directory from CVS
  (2009-06-07, HA)
- Fixed "Wrong `LD_PRELOAD` path in `duma.sh`". see
  <https://sf.net/tracker/?func=detail&aid=2800139&group_id=149725&atid=775376>
  (2009-06-12, HA)
- Fixed "_GNUmakefile is missing DESTDIR_" using submitted patch:
  <https://sf.net/tracker/?func=detail&aid=2800137&group_id=149725&atid=775376>
- Moved definition of `MAN_INSTALL_DIR` and `DOC_INSTALL_DIR` in `GNUmakefile`
  after definition of `prefix`
  (2009-06-15, HA)
- Removed `GNUmakefile` option `DUMA_SEMAPHORES`
  (2009-06-14, HA)

## 2.5.15 (2009-04-11)

- Added alternative locking implementation in `sem_inc.c` using critical
  sections. Code from _Peter Harris_, see:
  <http://code.google.com/p/electric-fence-win32/>
- Added _Windows_ threading to `testmt.c`
- Added _win32-msvc.net_ project file
- Use of `WIN32_SEMAPHORES` on _Win32_ / _Cygwin_ in `sem_inc.c`
  - The locking mechanism for multi-threading, with this configuration
    `testmt.c` works with pthreads or the _Win32_ API
- `CreateSemaphore()` now used, _maximum count = initial count = 1_
  (2008-08-03, HA)
- Removed usage of `strlen(`) in `strncpy()`
  (2009-03-19, HA)
- Add patch from [Andre Landwehr](mailto:andrel@cybernoia.de) which fixes
  a race condition when using the preprocessor macro `delete`
  (2009-04-07, HA)
- Fix bug in `strncpy()`: _Roman Jokl_ reported the bug, error check was
  too rigorous
  (2009-04-11, HA)

## 2.5.14 (2008-04-27)

- Added suggested `~/.gdbinit` as `gdbinit.rc`
- Added hint in `mprotectFailed()`
- Fix _GCC_ compiler warnings
- Rename of `sem_inc.h` to `duma_sem.h`, cause needed by `dumapp.h`
  (2008-03-12, HA)
- Update of `README` for _Microsoft_'s `pageheap.exe`, a heap debugging tool
  (2008-04-20, HA)
- Add patch from [Philip Mucci](mailto:mucci@cs.utk.edu) on behalf
  of _SiCortex_
  - Fix for `malloc(0)` which previously always returned `NULL`
  - Added environment switch `DUMA_MALLOC_0_STRATEGY`, which may return a
    special protected piece of memory for `malloc(0)`
  - Moved `malloc` / `SHOW_ALLOC` print outputs before all abort checks
    (2008-04-20, Philip Mucci, HA)
- Remove some warnings for `-Wall -Wextra`, especially for _Cygwin_
- Add detail to some messages when source file name and line number are not available
  (2008-04-21, HA)
- Removed environment variable `DUMA_ALLOW_MALLOC_0`,
  `DUMA_MALLOC_0_STRATEGY = 0` is equivalent to previous
  `DUMA_ALLOW_MALLOC_0 = 0`, default is `3`
  (2008-04-22, HA)
- Return unique pointer for C++ operator `new` for `DUMA_MALLOC_0_STRATEGY = 3`.
  Now, it should really be standards conforming.
  (2008-04-26, HA)
- Fix for C++ operator `new` with size zero (`0`)
- Added environment switch `DUMA_NEW_0_STRATEGY`
  (2008-04-27, HA)

## 2.5.13 (2008-03-19)

- Apply patches from [Philip Mucci](mailto:mucci@cs.utk.edu)
  of [SiCortex](http://sicortex.com):
  - Fix for `pthread_self()` and hang of `testoperators` test case on 64-bit
    _Linux_ platforms (_x86_64_and_MIPS64_)
  - Added `-Wall` to Makefile
  - Properly version symbolic library to have the version triple (`0.0.0`)
  - Removed `Control-M`'s from the source files
    - Please do not ship _UNIX_ sources with `Control-M` line endings
  - Make sure `ranlib` is run on the static library, various platforms
    require this
  - Add `-DPIC` for shared library builds
  - Added install targets for headers (`INC_INSTALL_DIR`)
  - Added install targets for documentation (`DOC_INSTALL_DIR`)
  - Added separate `test` target
  - Added proper `install` target that also refers to _GNU_ standard `DESTDIR`
    usage
  - Added `distclean` and `clobber` targets to remove all configuration
  - Added `reconfig` target to regenerate `duma_config.h`
  - Changed `Makefile` flow to recursively run if `duma_config.h` doesn't
    exist
  - Fixed return value error in `testmt.c`
  - Fixed args in `thread-test.c`
- Update `Makefile`
  - Updated `PACKAGE_SOURCE`
  - Added new target `dos2unix`
    (2008-03-09, HA)

## 2.5.12 (2008-01-25)

- Enhancement: Add environment variable `DUMA_CHECK_FREQ` to automatically
  check all memories _No-Mans-Land_ at each _n_'th allocation / deallocation. Use
  zero (`0`) for _n_ to deactivate the automatic checks
  (2008-01-24, HA)
- Updated `README.txt` for environment variables `DUMA_CHECK_FREQ` and
  `DUMA_SKIPCOUNT_INIT`
  (2008-01-25, HA)

## 2.5.11 (2008-01-20)

- Bugfix on thread safety in `sem_inc.c`, thanks to Andrew Kornev writing the
  right hint as bug-report: "_[ 1875926 ] non-thread safe `lock()` implementation_"
  (2008-01-20, HA)

## 2.5.10 (2008-01-15)

- Added a small test program to demonstrate crashing on multi-threaded
  programs from
  <http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=67838>
  (2008-01-15, HA)
- Added HTML comparison charts / text with C source code examples from
  <http://www.cs.utexas.edu/~jpmartin/memCheckers.html>
  into sub-directory comparisons with kind permission of _Jean-Philippe Martin_
- Update `Makefile` for all C source files
  (2008-01-14, HA)
- Bugfix for `Makefile` target `install` when `DUMASO` is empty; bug was reported
  by _Louis Strous_
  (2008-01-09, HA)
- Added hint where _No-Mans-Land_ was overwritten (below or above user-space)
  (2008-01-03, HA)

## 2.5.9 (2007-12-23)

- Added link to _mpatrol_ in `README`
- Added shell environment variable `DUMA_SKIPCOUNT_INIT`
  (2007-08-22, HA)
- Added section for _NetBSD_ in `Makefile`; there is always one (`1`) memory leak on
  _NetBSD_ 3.1, but the functionality works
  (2007-08-28, HA)
- Tested on `powerpc-apple-darwin8.0.0` inside of _PearPC_ 0.4 on _Windows_:
  - Compiles and passes all confidence tests; trying to debug `example1`
    from within gdb crashes _PearPC_ 0.4; running without gdb creates a
    core dump file that can be used for post-mortem analysis
    (2007-09-02, HA)
- Bugfix for `_duma_strncpy()`: no more calls to `strlen()`, reported by
  [Kamal Neet](mailto:kamalneet@gmail.com)
- Applied patch from [Eddy Pronk](mailto:epronk@users.sourceforge.net)
  submitted to _SourceForge_ with title "_libduma.so on Solaris_"
  (2007-11-13, HA)
- Added minor error checking in `print.c` (about `DUMA_OUTPUT_FILE`)
- Added some comments in `duma.h` and `dumapp.h`
  (2007-12-23, HA)

## 2.5.8 (2007-08-19)

- Fix: Set `DUMA_PREFER_GETENV` on _Mac OS X_; it doesn't link with `environ`
- Fix: _MINGW_ wants an exact declaration for function `DUMA_strerror`
  in `print.h`
- Fix: Add work-around in `testmt.c` to compile on _Microsoft Windows_
- Fix: Call `duma_init()` (`#ifdef DUMA_EXPLICIT_INIT`) in `testoperators.cpp`
- Added notes on pre-packaged `.rpm` files, provided by
  [Dries Verachtert](mailto:dries@ulyssis.org) at
  <http://dries.ulyssis.org/apt/packages/duma/info.html>
  (2007-08-17, HA)
- Added environment variable `DUMA_REPORT_ALL_LEAKS` defaulting to zero (`0`)
- Added empty definitions for macro functions `DUMA_SET_ALIGNMENT()`,
  `DUMA_SET_PROTECT_BELOW()`, and `DUMA_SET_FILL()`
- Updated `README` on shell environment variable options, added some entries
  to section _"OTHER ALTERNATIVE / ADDITIONAL DEBUGGING SOFTWARE / TOOLS"_ and
  added section _"COMPILATION NOTES FOR RELEASE / PRODUCTION"_
  (2007-08-18, HA)
- Add single-line function `duma_alloc_return()`; all memory allocated from
  **DUMA** is returned through this function. This allows you to set a
  conditional breakpoint on this function to catch a specific allocation
  (2007-08-19, HA)

## 2.5.7 (2007-08-17)

- Reformatting: Converted tabs to spaces
- Added test program `testenv.c` using global environment variable as alternative
  to `getenv()`
  (2007-08-15, HA)
- Added output of some configuration settings in start-up banner
- Switched off leak detection in shared library for all platforms; use the
  static library for finding leaks, with information where the memory was
  allocated
  - _NOTE_: Full leak checking without further information is quite useless. Too many
    "_correct_" programs don't free all memory, causing the system to free the
    memory at program termination. As a result, many platforms / environments
    are reported as "_broken_" by **DUMA**
- Output allocator type (`malloc`, `strdup`, `…`) with leak reporting for each
  non-freed memory block
- Removed option `DUMA_USE_FRAMENO` and the `frameno` variable; I suppose nobody
  is using it, but, additionally, it is not thread-safe
- Added option `DUMA_PREFER_GETENV`; if you prefer standard C library `getenv()`
  over global char `**environ`
- Added function `duma_check(void*)` and macro `DUMA_CHECK()`; it checks the
  _No-Mans-Land_ - especially the unprotected end - of the memory block
- Added function `duma_checkAll()` and macro `DUMA_CHECKALL()`; it checks
  the _No-Mans-Land_ - especially the unprotected end - of all allocated
  memory blocks
  (2007-08-17, HA)

## 2.5.6 (2007-08-15)

- Modified example `Makefile` to not link to pthreads on _Microsoft Windows_
  (2007-08-12, HA)
- Added _win32-msvc.net_ project file for `testoperators.cpp`
- Bugfix: Support for option `DUMA_NO_LEAKDETECTION`; check for this option
  before calling any non-existing operators with leak parameters
- Enhanced comments in `Makefile` for `DUMA_SO__` and `DUMA_LIB__` options
- Changes in `Makefile` to build dynamic library on Mac OS X
- Preloading **DUMA** library now works on Mac OS X
- Added test for _Debian_ bug report _241156_ as `testmt.c`
  (2007-08-14, HA)

## 2.5.5 (2007-08-11)

- Support for _Solaris_ (_Solaris_ 10 using the _GNU_ toolchain)
- Fix for _Solaris_: `strerror()` calls `calloc()`, leading to recursion
- Added preprocessor option `DUMA_NO_STRERROR`
- Internal redesign
  - Collected several global static variables into one structure and several
    global non-static variables to another structure, each with prepended
    and appended protection space
    (2007-08-11, HA)

## 2.5.4 (2007-07-31)

- Support for _Win32_ using _MSYS_ / _MINGW_ when calling _make_ with
  `OSTYPE=msys`; call `mingw32-make OSTYPE=msys` from the _Windows_
  _Command Prompt_, after adding _MINGW_'s `bin` to the _PATH_
  (2007-07-28, HA)
- Echo a single dot (`.`) for _Windows_ _Command Prompt_
  (2007-07-31, HA)

## 2.5.3 (2007-07-15)

- Added simple `Makefile` for examples in sub-directory `example_makes/ex*`
- Modified `Makefile` to avoid build of shared libs / executables specific to OS
- `dumapp.h` now keeps C macro definitions
- Support for _Mac OS X_ when calling _make_ with `OS=osx`
- Support for _Win32_ using _Cygwin_ when calling _make_ with `OSTYPE=cygwin`
  (2007-07-14, HA)
- Bugfix in `createconf.c` for _Win32_ when **_not_** using _Visual C++_
- _Cygwin_ fixes
  - Switch off stacktrace (_before trying to integrate in `Makefile`_)
  - `caddr_t` and `u_int` were already defined
  - Use signals on _Linux_ / _UNIX_ in `dumatest.c`
  - Update `Makefile`
    (2007-07-13, HA)

## 2.5.2 (2007-07-12)

- Other minor corrections
- Added preprocessor option `DUMA_SEMAPHORES` to select pthreads locking
  mechanism: semaphores or mutexes
- Removed automatically generated _Visual C++_ file `detoursexample1.ncb`
  from _CVS_ and archives
  (2007-07-12, HA)

## 2.5.1 (2007-07-08)

- Turned global variables `DUMA_PROTECT_BELOW`, `DUMA_ALIGNMENT`, and `DUMA_FILL`
  into thread local variables
  - Access with new function macros:
    - `DUMA_SET_ALIGNMENT()`
    - `DUMA_SET_PROTECT_BELOW()`
    - `DUMA_SET_FILL()`
- Support for `posix_memalign()`
- Add `pthread_mutex` implementation (_as an alternative to semaphores_)
  (2007-07-03, HA)

## 2.5.0 (2006-07-01)

- Documentation updates
  - Use _Natural Docs_
- _Win32_-specific fixes
  - _Detours_ support for using **DUMA** (_with just binaries_)
  - Compile a **DUMA** DLL
  - **DUMA** can perform stack traces of each allocation
  - Support for _Visual Studio 2005_
  - Support for output to debug console
- Support for output to a file
  - Can control output via environmental variables

## 2.4.28 (2006-06-18)

- Enhancement: Reworked initialization for Request-ID _1458083_ on _SF_;
  checks for recursive calls in `_duma_init()` and `duma_init()`
  (2006-06-17, HA)
- Bugfix in `new[]` operators occurred on _alpha-linux1_ on _SF_'s compile farm
  (2006-06-18, HA)
- Fix in `Makefile`: `DUMA_OPTIONS` was not used when compiling `createconf.o`
- Fix compile error when `DUMA_NO_LEAKDETECTION` was set in `testoperators.cpp`
- Fix to obey `EXPLICIT_INIT` in `testoperators.cpp`
  (2006-06-18, HA)
- Fix: As in Request-ID _1482267_ on _SF_: Updated install directory for manual:
  `$prefix/share/man/man3` should fit the _Filesystem Hierarchy Standard_
  (_FHS_) 2.3 for `/usr` and `/usr/local`
  (2006-06-18, HA)

## 2.4.27 (2006-04-23)

- Published a German-language article about **DUMA** on <http://duma.sourceforge.net>
- Bugfix: Removed buffer overflow in `DUMA_sprintf()` for long file names
  - Added parameter `maxsize` for output buffers in some functions
  - Incremented `STRING_BUFFER_SIZE` to reduce this risk; bug reported
    by _<loigu@volny.cz>_
    (2006-01-09, HA)

## 2.4.26 (2005-10-28)

- New project file for _Dev-C++_ 4.9.9.2 for `createconf` from
  [Benjamin Berkels](mailto:benjamin.berkels@ins.uni-bonn.de)
- Bugfix and enhancement: Avoid recursion from `sem_init()` in _Linux_ / _UNIX_, where
  `sem_init()` may call `malloc()`, which again calls semaphore locking
  (2005-10-25, HA)
- Bugfix in `delete` macro: _Magic_ must be a single variable! Bug was reported
  by [Benjamin Berkels](mailto:benjamin.berkels@ins.uni-bonn.de)
- Some more _TLS_ preparation
  (2005-10-28, HA)

## 2.4.25 (2005-10-21)

- Bugfix: semaphores were not initialized correctly; this lead to a hang
  - Thanks for reporting (_and providing a test environment_) go to
    [Tim Braun](mailto:braun@informatik.uni-kl.de)
- Fixes for _Dev-C++_ from [Benjamin Berkels](mailto:benjamin.berkels@ins.uni-bonn.de)
  - Updated project files for _Dev-C++_ 4.9.9.2 / _GCC_ 3.3.1
  - Fixed compiler errors affecting _Dev-C++_ 4.9.9.2 / _GCC_ 3.3.1
- Modified `delete` macros
- `DUMA_Magic` now array (`call_depth`)
  (2005-10-21, HA)

## 2.4.24 (2005-10-10)

- New program `testoperators` writes it's own member `new` / `delete` operator with
  file name and line number forwarding to **DUMA**
- Reworked `Makefile`: Added `tstheap_so`, which runs with shared library
- Output in banner now shows which library (_static_ / _shared_) is in use
  (2005-10-09, HA)

## 2.4.23 (2005-10-08)

- Write **DUMA**'s preprocessor flags at compile time to `duma_config.h`
- Update `Makefile`
  (2005-10-07, HA)

## 2.4.22 (2005-10-06)

- C++ `new` operators are now (_more_) standard conforming; allocations of
  size equal to zero (`0`) now returns a non-zero (`!0`) pointer
- New option `DUMA_SUPPRESS_ATEXIT` as environment variable from
  [Tim Braun](mailto:braun@informatik.uni-kl.de) that suppress calls to the C
  library's `atexit()` function for **DUMA**'s leak checking function in buggy
  environments (_where `atexit()` hangs_)
- Implemented alternative for C library's `atexit()` using the _GNU C_ compiler's
  'destructor' function attribute
- Add new preprocessor flag `DUMA_PREFER_ATEXIT` in `Makefile`
- Updated project files for _Dev-C++_ 4.9.9.2 / _GCC_ 3.3.1 from
  [Benjamin Berkels](mailto:benjamin.berkels@ins.uni-bonn.de)
- Updated `TODO`
- Bugfix: `EF_` was not replaced by `DUMA_` in `tstheap.c`
- Bugfix: Fix rules for building test objects; `DUMA_OPTIONS` were not passed
  (2005-10-06, HA)

## 2.4.21 (2005-09-29)

- Modified `Makefile`: name for shared library and symbolic links now
  configurable at start
- Update `README`
- Sort `TODO` by priority
  (2005-10-04, HA)
- Bugfix: Follow `enum _DUMA_FailReturn` in `_duma_allocate()` function
- Bugfix: Initializing `userAddr` in `_duma_allocate()` function may lead to bug
  if allocation failed
- `new` operators now (_nearly_) C++ standard conforming
  (2005-09-29, HA)

## 2.4.20 (2005-09-27)

- Integrated patches from [Zbynek Vyskovsky](kvr@centrum.cz)
  - Use tighter alignment when size is smaller than default alignment
  - Replaced calls to `EF_Exit()` by `EF_Abort()`
  - Modified `README`
    (2005-09-19 - 2005-09-23, ZV)
  - Reworked _Zbynek_'s patch to use `long` in internal address calculations
    - Auto-detect compatible integer types `DUMA_ADDR` and `DUMA_SIZE` in
      `createconf`
    - Auto-detect `DUMA_MIN_ALIGNMENT` in `createconf`
    - Write values to `duma_config.h`
    - Use auto-detected values in code
- Reworked `DUMA_sprintf()` and it's format specifier
- Bugfixed `Makefile`: `DUMA_SO_OPTIONS` also used `DUMA_OPTIONS`
  - Removed `-DDUMA_NO_CPP_SUPPORT`, as `LD_PRELOAD` works for C++ `new`,
    `new[]`, `delete` and `delete[]` operators
    (2005-09-24, HA)
- Bugfixed `reduceProtectedMemory()`: _Windows_ `VirtualFree(,,MEM_RELEASE)` can
  only free whole allocations, not parts
- Bugfix in memory allocation: try allocation in loop until
  `reduceProtectedMemory()` fails de-allocating more memory; long running
  programs with much memory handling should benefit
  (2005-09-26, HA)
- Added project files for _Microsoft Visual C++ .NET_ 2003
- Applied one more patch from _Zbynek Vyskovsky_ concerning alignment; his
  calculation of next lower power of two (2) is much smaller
- Bugfix: return `(void*)0` in `_duma_allocate()`, when `userSize == 0`
  (2005-09-27, HA)

## 2.4.19 (2005-09-20)

- Fixed compile error in `duma.c` introduced in 2.4.18
- Enhanced `Makefile`
  (2005-09-19, HA)
- Added run-time check for `DUMA_PAGE_SIZE` from `duma_config.h`
  (2005-09-17, HA)
- Added check for initialization function `__attribute ((constructor))`
  (2005-09-18, HA)

## 2.4.18 (2005-09-16)

- `DUMA_get_sem()` is no longer called when `DUMA_NO_THREAD_SAFETY` is set
- Split `CHANGELOG` document into two files: `TODO` and `CHANGELOG`
- Created `INSTALL` document
- Modified `Makefile`: added special rules for building shared library
  (2005-09-10, HA)
- Modified `README`
  (2005-09-16, HA)
- Removed option `DUMA_FREE_WIPES`
- Documented options in `README`:
  - `DUMA_SLACKFILL`
  - `DUMA_MALLOC_FAILEXIT`
  - `DUMA_MAX_ALLOC`
  - `DUMA_FREE_ACCESS`
  - `DUMA_SHOW_ALLOC`
  - `DUMA_DISABLE_BANNER`
- Add new preprocessor flag `DUMA_NO_HANG_MSG` in `Makefile`
  (2005-09-16, HA)

## 2.4.17 (2005-09-10)

- Forked _Electric Fence_, because _Bruce Perens_ wrote:
  > … Hayati Ayguen must choose another name for his program
  > … "Electric Fence" is a trademark he is not permitted to use …
- Opened a "_new_" project for **DUMA** (_Detect Unintended Memory Access_)
  - Rename _efence_ to **duma**
  - Rename _Electric Fence_ to **DUMA**
  - Rename `EF_ to DUMA_`
  - Rename `ef_ to duma_` (_and so on …_)
    (2005-09-10, HA)

## 2.4.16 (2005-08-28)

- Added examples for article portability: use standardized `strerror()` instead
  of `sys_nerr` and `sys_errlist[]`
- Bugfix: Error when defining `EF_NO_LEAKDETECTION` in `_eff_allocate()`
- Bugfix: Error when defining `EF_NO_LEAKDETECTION` in `_eff_deallocate()`
- Enhancement: Mark allocations from standard libraries before `ef_init()` is
  called with `lineno = -1` to allow special treatment in `leak_checking`
- Changed default in `eftest` to use two signals: `SIGSEGV` and `SIGBUS` instead of
  single `PAGE_PROTECTION_VIOLATED_SIGNAL`
- Define functions (`memcpy`, `strcpy`, `strcat`) as non-intrinsic for _Visual C++_
  compiler in Release mode
  (2005-08-28, HA)
- Enhancement: Allow alignments bigger than page size
  (2005-08-23, HA)
- Document `EF_NO_THREAD_SAFETY` preprocessor flag in `Makefile`
- Added `EF_EXPLICIT_INIT` preprocessor flag to workaround buggy environments
  (2005-08-21, HA)

## 2.4.15 (2005-07-24)

- Bugfixed page management under _Microsoft Windows_; virtual address space was never
  released. Unfortunately, this "quick" fix avoids memory pooling on _Windows_
- Remove double "_Electric Fence:_" messages when calling `EF_Abort()`
  or `EF_Exit()`
  (2005-07-24, HA)
- Added parameter `ExitOnFail` to `Page_Create()`
- Added warning when allocation failed and `ExitOnFail` is off
  - Extended `_eff_allocate()` for this; prepared new for standard conformity
    (2005-07-20, HA)

## 2.4.14 (2005-07-15)

- Integrated code from [Tim Braun](mailto:braun@informatik.uni-kl.de)
  - New `EF_SHOW_ALLOC` environment variable, which prints allocations and
    deallocation when variable set check if `malloc()` and `free()` are bound
    to _efence_
    (2005-07-15, HA)
- Integrated a patch from [Zbynek Vyskovsky](mailto:kvr@centrum.cz) in his
  words: "_I modified Electric Fence a little, to be able to catch free-ing
  memory via watch point in debugger. The patch (attached) solves the
  problem when you are watching expression for change and suddenly
  realize the memory containing expression disappeared. It has no
  other effect, just makes debugging easier._"
  (2005-07-11, HA)
- Bugfix for internal slot mode `EFST_DEALLOCATED` reported by _Mikolas Patocka_
  error occurred when user-space memory region of freed memory is reused from
  system and freed again: _efence_ claimed it was freeing already freed memory
  (2005-03-02, HA)
- Defining macros / functions, also for `str[n]cpy()` and `str[n]cat()`, checking for
  overlapping memory regions
  (2005-02-17, HA)
- Now defining macros / functions, also for `strdup()` / `memcpy()`
- `memcpy()` checks if memory regions overlap
  (2005-02-16, HA)
- Added `EF_OLD_DEL_MACRO` preprocessor flag to keep compatibility to old
  `DEL_ELEM()` / `DEL_ARRAY()` macros; when not defined, a macro for `delete`
  is defined, which has standard conforming syntax
  (2005-02-14, HA)

## 2.4.13 (2005-02-11)

- Added internal flag saving the source (_allocation_ / _deallocation_) for
  file name and line number
- Added `EF_OLD_NEW_MACRO` preprocessor flag to keep compatibility to old
  `NEW_ELEM()` / `NEW_ARRAY()` macros. When not defined, a macro for `new` is
  defined, which has standards conforming syntax. Unfortunately, you have to
  use `DEL_ELEM` / `DEL_ARRAY` further to utilize file name and line number
  of deallocation calls
  (2005-02-10, HA)
- Reworked / revised _ALL_ internal functions (_!!!_)
- Free-ing already freed memory is now (_better_) detected
- Disallows coalescing memory regions and also stores
  `__FILE__` and `__LINE__` of `free()` to be able to print position
  of first free
- Added `EF_USE_FRAMENO` preprocessor flag. Changed not to support
  `EF_newFrame()` and `EF_delFrame()` by default
  (2005-02-07, HA)
- Applied bug fix posted by _Luis Gonzalez_. Bug was occurring under _SuSE Linux_
  9.1 when calling `eftest` with a higher number (_such as `10000`._)
  (2005-02-02, HA)
- Bugfixed `memalign()` which was not exported as `extern "C"`. This bug lead to
  crashes when free-ing memory allocated by `memalign()`. Bug was reported by
  _Grant Goodyear_ and _Steven G. Johnson_. Now defining macros / functions
  also for `valloc()`
  (2005-02-03, HA)

## 2.4.12 (2005-01-05)

- Added `EF_NO_GLOBAL_MALLOC_FREE` preprocessor flag to work-around buggy
  environments: no `malloc()`, `free()`, `realloc()`, `calloc()` are put into the
  global name-space of the _efence_ library, thus only files which include
  `efence.h` call the _efence_ `malloc()`, `…` replacement functions. This flag
  is also helpful where linking order cannot get controlled e.g. when
  memory is allocated from a library not using _efence_, but `free` is
  called from _efence_ using _efence_. This is a problem when using
  DLL libraries, which are linked against `msvcrt.dll` and its
  `malloc()` / `free()` under _Microsoft Windows_. The same problem applies
  when `libstdc++` / `libgcc` is not linked in correct order
  (2005-01-04, HA)

## 2.4.11 (2005-01-03)

- Bugfixed signal handling in confidence test (`eftest`), which lead to false
  errors with my newly installed _Mandrake Linux_ 10.1
  (2005-01-03, HA)
- Bugfixed checking at `free()`, when `EF_PROTECT_BELOW` flag changed which lead
  to false positives
- Bugfixed error message output to stderr; length of messages were calculated
  too short; fixes functions `EF_Abort()` and `EF_Exit()`
  (2004-08-15, HA)

## 2.4.10 (2004-07-21)

- Added preprocessor macros for `CA_DECLARE`, `CA_DEFINE`, and `CA_REF` in `efence.h`
  for declaration, definition and reference to Checked Arrays. These macros
  allow checks of arrays which are allocated on stack, but they are very
  slow on references cause every reference has to be checked
- Added `EF_ASSERT()` which definitely halts (_for debugging_)
- Precompiled headers have to be switched off in _Microsoft Visual C++_ to get all the
  C++ operators to work, but don't ask me why!
- Implemented all the various `new` / `delete` / `new[]` / `delete[]` C++ operators. The
  implementations are not C++ conforming concerning their behavior added type
  mismatch detection between `malloc()` / `free()`, `new` / `delete`, `new[]` / `delete[]`;
  this is deactivated when `EF_NO_LEAKDETECTION` is set
- Added `EF_MALLOC_FAILEXIT` parameter (_for now, not implemented_)
- Extended semantics of `EF_PROTECT_FREE`
- Added `EF_MAX_ALLOC` parameter
- Bugfix: Why should we ever use `Page_Delete()` when setting up the
  "_dead_" page?
- Bugfix: `EF_PROTECT_FREE` did exactly the opposite of what it should
  do, from Bruce's version 2.2.2 (or maybe earlier)
  (2004-07-16, HA)
- Confidence test now pass again
- Removed problems when used `EF_NO_LEAKDETECTION` preprocessor flag
- `Makefile` works again, also included automatic generation of
  `efence_config.h`
- Added automatic generation and inclusion of `efence_config.h` instead
  function `Page_Size()`
  (2004-07-15, HA)
- Added code for thread safety: Only one thread at once is allowed to enter
  some internal functions. This can be deactivated using the
  `EF_NO_THREAD_SAFETY` preprocessor flag. There may be flaws concerning
  threads, when using the C++ operators for leak detection; use the
  `EF_NO_LEAKDETECTION` preprocessor flag if you encounter problems!
- Some files (`page.c` and `print.c`) have turned to header files, the needed
  functions are now declared static and are no more visible outside
  `efence.c` this way the `NDEBUG` preprocessor flag has been replaced by
  `EF_NO_EFENCE`, `EF_NO_CPP_SUPPORT` - be careful not to include
  _efence_ in your release builds!
  (2004-03-21, HA)

## 2.4.9 (2002-12-05)

- Added checks for No-Mans-Land (_space which cannot get protected from the MMU_);
  this area gets filled with `EF_FILL` on allocation, and gets checked on
  deallocation
  (2002-12-05, HA)

## 2.4.8 (2002-12-04)

- One big fix and many smaller improvements for C++ code. Old macros `NEW_ELEM`,
  `NEW_ARRAY` were not usable when allocating classes, which have
  constructor / destructor; the usage of these macros has not changed
  (2002-12-04, HA)

## 2.4.7 (2002-11-22)

- Support _Borland_'s free command-line tools: _Borland C++ Builder_ 5.5
  - Throw away unnecessary declarations of `malloc()`, `free()`, `…`
    _Borland_ didn't like them, and neither _Microsoft Visual C++_ 6.0, nor _gcc_
    (_Dev-C++_) needs them
  - Added project files in sub-directory `win32-vide` for _VIDE_ 1.24 using
    _Borland C++ Builder_ 5.5 (_see <http://www.objectcentral.com>_)
    (2002-11-22, HA)

## 2.4.6 (2002-11-18)

- Remove memory leak in eftest
- Allow re-inclusion of `efence.h` after inclusion of `efenceint.h`
- Added some project files in sub-directory `win32-devcpp` for _Dev-C++_ 4.9.6
  using _gcc_ (_See <http://www.bloodshed.net/>_) and saved its generated
  `Makefile`'s; left `tstheap`'s memory leaks
  (2002-11-18, HA)

## 2.4.5 (2002-11-17)

- Modifications in print routines (`EF_Print()`, `EF_Abort()`, `…`)
- Added direct output to _Visual C++_ debug output window
- Some additions to `Makefile`
  (2002-11-17, HA)

## 2.4.4 (2002-11-03)

- Separation of C++ files: `efencepp.h`, `efencepp.cpp`
- Rename `EF_push()` / `EF_pop()` to `EF_newFrame()` / `EF_delFrame()`
- Add new compile option `EF_NO_LEAKDETECTION`
- Add new compile option `EF_NO_CPP`
- Split `efence.h` to `efence.h` and `efenceint.h`
- Add _Copyright_ and _License_ information to many files
- Rename `COPYING` to `COPYING-GPL`
  (2002-11-03, HA)

## 2.4.3 (2002-10-08)

- Added following preprocessor macros for Release and Debug Mode
  - `#define NEW_ELEM(TYPE) new TYPE`
  - `#define NEW_ARRAY(TYPE,COUNT) new (TYPE)[COUNT]`
  - `#define DEL_ELEM(PTR) delete PTR`
  - `#define DEL_ARRAY(PTR) delete []PTR`
    which are mapped to `malloc()` and `free()` in Debug Mode
- Use these macros to get the file name and line number of a C++-style memory leak
  (2002-10-08, HA)

## 2.4.2 (2002-10-07)

- Added support for implicit and explicit leak checking:
  - `void EF_push(void)` creates a new memory frame
  - `void EF_pop(void)` checks for memory leaks allocated after `EF_push()`;
    this function is called automatically by `onexit()`, even without
    `EF_push()`
    (2002-10-07, HA)

## 2.4.1 (2002-10-06)

- Port to _Windows NT_ (_2000_ / _XP_) by adding sections to following functions:
  - `Page_AllowAccess()`
  - `Page_Create()`
  - `Page_Delete()`
  - `Page_DenyAccess()`
  - `Page_Size()`
    (2002-10-06, HA)

## 2.4.0 (2002-10-03)

- Added support for C++ operators `new`, `new[]`, `delete` and `delete[]`
- Added some project files in sub-directory `win32-msvc/` for
  _Microsoft Visual C++_ 6.0
  (2002-10-03, HA)

## 2.2.2

- Shared library must be position-independent code

## 2.2.0

- Merge in bug-fixes, multi-thread patch, shared library patch, `debian/`
  sub-directory used for building the _Debian_ package

## 2.0.5 (1995-01-20)

- Port to _Linux_
  (1995-01-20)

## 2.0.4 (1994-09-30)

- When `realloc` is passed a zero address, it should work the same way as
  `malloc()`. Fix forward declaration of `mprotect()` in `page.c` to use `void *`,
  not `caddr_t`, for addresses; _IRIX_ 5.0.1 complained about that
  (1994-09-30)

## 2.0.3 (1993-05-29)

- Don't attempt to allow access to a zero-sized page when `EF_ALLOW_MALLOC_0` is set
- Attempt to un-map memory from `Page_Delete()`. If that doesn't work, fall
  back by protecting the page from all references. Un-mapping small
  segments of a mapping used to crash my _SGI IRIX_ 5.0 system; I assume
  that nobody is running 5.0 any longer
  (1993-05-29)

## 2.0.2

- Add support for _DEC Alpha_
- Add `%a` pattern for printing addresses, which assumes they are passed in
  a `void *`

## 2.0.1

- Add work-arounds for kernel and library bugs under _HP-UX_
  - _HP_ has been notified and will repair these soon