All relevant changes to the project are documented in this file.
- Issue #153: German translation update
- Issue #163: heap overflow in
cfg_tilde_expand()
, found by Han Zheng
v3.3 - 2020-06-25
- Support building static library on Windows
- Support for
fmemopen()
in Windows UWP applications - Support for
cfg_getopt(cfg, "sub=name|option")
, i.e., get an option from a sub-section, by Peter Rosin - Support for
CFGF_MODIFIED
flag, to detect changes to settings in memory after parsing, by Peter Rosin - Support for filtering out settings when printing, by Peter Rosin
- Support for dynamic key=value sections with no pre-runtime knowledge of setting names, useful for environment variables and similar
- Updated German translation, by Chris Leick
- Fix loop-forever bug found by Christian Reitter; a .conf file
containing only "=", will cause even the simplest parser to loop
forever in internal function
cfg_getopt_secidx()
- Issue #113: Fail to build
strdup()
replacement - Issue #118: Fix build on Windows, missing
fmemopen()
replacement - Issue #120: Handle shell and C comments with no space separator
- Issue #125: Drop developer debug msg
QSTR: ...
- Issue #131: Fix
CFG_PTR_CB()
regression, segfaults when, e.g.,cfg_free()
is called. Found and fixed by Peter Rosin - Issue #135: Revert
CFGF_RESET
flag ifcfg_setmulti()
family fail - Issue #137: Memory leak in
cfg_setopt()
for PTR options
v3.2.2 - 2018-08-19
This is a security patch release for CVE-2018-14447. The vulnerability
affects all releases since v3.1 when the CFGF_COMMENTS
functionality
was first introduced.
- Issue #109: Out of bounds read in
lexer.l:trim_whitespace()
.
v3.2.1 - 2017-08-17
- Issue #101: Bump ABI major number due to incompatible change in struct
when adding option annotation/comments in v3.1:
1.1.0 -> 2.0.0
v3.2 - 2017-06-03
- Issue #96: Add Windows/mingw compatible
fmemopen()
replacement - Issue #98: Fix v3.1 regression, segfault on comment-only lines
v3.1 - 2017-05-24
- Refactored
CFGF_IGNORE_UNKNOWN
support, libConfuse now properly ignores any type and sub-section without the need for declaring an__unknown
option. When the flag is set all unknown options, including unknown sub-sections with, in turn, unknown options, are now fully ignored - Issue #69: New API for creating titled sections at runtime, by Jonas Johansson @jonasj76
- Issue #92: Support for option annotation/comments. Every option can
now have a comment, which is both read and written from/to file.
Disabled by default, enable with
CFGF_COMMENTS
flag incfg_init()
- ABI bump: 1.0.0 --> 1.1.0, due to new functionality
- Build unit tests statically for easier debugging
- Issue #21: Major refactor of lexer to fix memory leaks,
cfg_free()
now properly releases all memory. By Joachim Nilsson @troglobit - Issue #64: Fixed MSVC build errors, by George Koskeridis @Gikoskos
- Issue #65: SIGSEGV when parsed default values are used with include, by Dmitri Zhabinski
- Issue #71: Fix syntax in rpm spec file, for CentOS/RHEL7
- Issue #73: Adjust gettext version requirement to build on CentOS/RHEL7.
GNU gettext v0.18.2.1 update
AM_GNU_GETTEXT()
to use AC_PROG_MKDIR_P instead ofAM_PROG_MKDIR_P
, but v0.18.1.1 is included in Ubuntu 12.04 LTS. Fortunately Ubuntu 14.04 LTS ships v0.18.3.1 and Debian Jessie ships v0.19.3. Unfortunately, CentOS7 and RHEL7 ships v0.18.2.1, so for best compat. level at this point in time we require v0.18.2. - Issue #74: Fix typos in documentation, by Luca Ceresoli
- Issue #79: Add
fmemopen()
compat for *BSD, including macOS
v3.0 - 2016-03-03
This release signifies a major change in libConfuse. On out-of-memory
conditions at run time, invalid API input, and some other odd use-cases,
libConfuse will no longer assert()
. Instead, NULL
or CFG_FAIL
is
returned with an error code for you to handle. For some users this will
completely change how your application works, so heads up! The library
ABI version has also been stepped due to this.
Special thanks in this release goes out to Frank Hunleth, Peter Rosin and David Grayson for their tireless efforts in helping improve this library!
Note: libConfuse no longer calls setlocale()
for LC_MESSAGES
and
LC_CTYPE
. See the documentation for cfg_init()
for details.
- Support for handling unknown options. The idea is to provide future
proofing of configuration files, i.e. if a new parameter is added, the
new config file will not fail if loaded in an older version of your
program. See the
CFGF_IGNORE_UNKNOWN
flag in the documentation for more information. Idea and implementation by Frank Hunleth. - Add public API for removing sections at runtime, by Peter Rosin.
- Allow
cfg_opt_getval()
on options that areCFGF_MULTI
sections, by Peter Rosin. - Add
cfg_setmulti()
andcfg_opt_setmulti()
, by Peter Rosin. - Add CLI example of how to manage configuration changes at runtime, also by Peter Rosin.
- Support for Travis-CI and Coverity Scan, by Joachim Nilsson.
- Use
autoreconf
inautogen.sh
instead of calling tools separately. - Powershell script for AppVeyor CI to build libConfuse with MSYS2 by David Grayson.
- Removed calls to
setlocale()
intended to localize messages, withLC_MESSAGES
, and region specific types, withLC_CTYPE
. This is now the responsibility of the user of the library. - Reindent to Linux coding style for a clear and well defined look, this to ease future maintenance. Issue #33
- Add support for
CFGF_DEPRECATED
andCFGF_DROP
option flags. The former causes libConfuse to print a deprecated warning message and the latter drops the read value on input. Idea and implementation by Sebastian Geiger. Issue #24 - Add
HACKING.md
document to detail maintenance and release checklists
- Do not assert on API input validation, memory allocation, or similar.
Instead, return error code to user for further handling. This change
also includes fixes for a lot of unchecked API return values, e.g.,
strdup()
. Issue #37 - Protect callers arguments to
cfg_setopt()
, by Peter Rosin - If new value to
cfg_setopt()
fails parsing, do not lose old value, by Peter Rosin. - Fixes to update support for older versions of Microsoft Visual Studio as well as MSYS2/mingw-w64 by Peter Rosin and David Grayson.
- Issue #45:
cfg_init()
does not report error on multiple options with the same name. Fixed by Peter Rosin. - Fixes for memory leaks, invalid expressions, unused variables and missing error handling, all thanks to Coverity Scan
v2.8 - 2015-10-14
- Support for specifying a searchpath for
cfg_parse()
, by J.J. Green - Restore build of shared library by default, by Nathan Phillip Brink
- Added German translation, contributed by Chris Leick, Aurelien Jarno, and Tux^verdreifelt.
- Document
CFG_SIMPLE_STR
for doxygen, by Nathan Phillip Brink - Update ISC license to 2007 version, by Joachim Nilsson
- Write files in a Bourne shell compatible way, by Alvaro G. M
- Fix mid-string environment variable substitution, by Frank Hunleth
- Various ISO C90 and
-ansi
fixes by Carlo Marcelo Arenas Belon - Fix C compiler warnings for
const
strings, by Craig McQueen - Fix
make distcheck
and out-of-source builds, by Nathan Phillip Brink - Fix missing
.gitignore
files, by Carlo Marcelo Arenas Belon - Fix
CFG_SIMPLE_INT
on 64-bit systems, by Carlo Marcelo Arenas Belon - Coding style cleanup by J.J. Green
- Fix issue #27: searchpath free problems. Fix to new feature introduced in this release cycle.
- Improved support for MSYS2 by David Grayson.
v2.7 - 2010-02-20
- Expose
cfg_setopt()
function in public API, suggested by Daniel Pocock - Add doxygen documentation for
cfg_setopt()
, by Daniel Pocock - Don't fail on compiler warnings, remove
-Werror
, by Martin Hedenfalk - Avoid aborting processing of the configuration buffer after returning from include processing. By Carlo Marcelo Arenas Belon
- Make building of examples optional.
- Fix user defined error callbacks, by Martin Hedenfalk
- Include
locale.h
, required bysetlocale()
, patch by Diego Petteno - Check for
inet_ntoa()
in external library, needed for tests to pass on Solaris, patch by Diego Petteno - Fixes for build warnings, by Martin Hedenfalk and Carlo Marcelo Arenas Belon
- Fix segfault when processing a buffer that called
cfg_include()
, patch submitted by Carlo Marcelo Arenas Belon - Fix lexer match problem with unquoted strings ending in a slash. Fixed by Martin Hedenfalk, reported by Sylvain Bertrand.
v2.6 - 2007-10-13
-
added French translation contributed by Matthieu Sion
-
added build script and instructions for compiling with Mingw under Windows (contributed by Matthieu Sion)
-
now accepts a simplified list append syntax:
option = "value" instead of option = {"value"}
-
added flag
CFGF_NO_TITLE_DUPES
: multiple section titles must be unique (duplicates raises an error, only applies to sections) (suggested by Brian Fallik) -
remove obsolete
confuse-config
script in favour ofpkg-config
-
windows build files now only in separate zip distribution
- fixed rpm builds, patch by Dan Lipsitt
- always installs
pkg-config
.pc script - fixed a bug reported by Josh Kropf with single sections with titles
- added patch that escapes values with quotes and backslashes when printing.
- fixed a memory leak in default values for string lists, reported by Vineeth Neelakant.
v2.5 - 2004-10-17
- added flag
CFGF_NODEFAULT
(option has no default value) - added a tutorial
- updated autoconf stuff, libconfuse installs with appropriate suffix now
- added data file for
pkg-config
(trypkg-config --libs libconfuse
) - updated
confuse-config
script (now only installed ifpkg-config
not found) - added
cfg_name()
andcfg_opt_name()
functions
- fixed
cfg_set_validate_func()
for sections, using the "|" syntax
v2.4 - 2004-08-09
- added option type
CFGT_PTR
as a user-defined type
- fixed building of shared libraries
v2.3 - 2004-05-22
- options passed to
cfg_init()
are now dynamically duplicated, so it is no longer necessary to declare thecfg_opt_t array
static - added tests using 'check' (a unit testing framework for C)
- added config script
confuse-config
- fixes compilation errors with gcc < 3.3
v2.2 - 2003-09-25
- Allows more characters in an unquoted string (thanks Mike)
- added
cfg_opt_get
functions - added
cfg_opt_size
function - added support to print options to a file
- added print callback function per option
- simple options can be retrieved with the
cfg_get
functions (allows using thecfg_print
function for simple values) - added validating callback function per option
v2.1 - 2003-07-13
- Reversed logic in
cfg_getXXX
functions, they now abort if given an undeclared option name, and NULL/false if no value is set. Suggested by Ademar de Souza Reis Jr. - Sections without
CFGF_MULTI
flag now have default values - The
cfg_getXXX
functions now accept an extended syntax for the option name, trycfg_getxxx(cfg, "sectionname|optionname")
. This way one doesn't have to first get the section withcfg_getsec()
. - Added project files for MS Visual C 6.0
- Includes io.h on windows
- Setting a list to the empty list in the config file now possible.
- Appending to default values in a list is now OK.
- Hexadecimal escape sequences allowed in double-quoted strings
- Only include NLS support if gettext found in libc or preinstalled
- Documented the
cfg_setlist
andcfg_addlist
functions - The
cfg_opt_setxxx
functions no longer take acfg_t?
parameter (unused anyway)
- Fixed two more memory leaks. (
val->section
andcfg->filename
) - Fixed unterminated string bug in replacement strndup function
- Fixed initialization of default values for lists, when given a NULL string. Now initialized to the empty list. Noted by Juraj Variny.
- Corrected line number with multi-line quoted strings
- Fixed undetected
/*comment*/
(ie, without space between /* and the text) - Forgot to
fclose()
include file after use, found by James Haley
NOTE: Compatibility with earlier versions is broken!
- Changed
cfg_flag_t
fromenum
toint
(should now compile with C ) - Variable number of arguments to functions: function types should no
longer specify number of expected arguments in the initializer, the
callback should instead check the
argc
variable. - Added documentation for the value parsing callback
- Changed the definitions of
cfg_func_t
andcfg_callback_t
, the cfg and option context are now both passed as parameters - Added a bunch of
cfg_setXXX
functions to set option values after parsing - Some types renamed for consistency (
cfgopt_t
tocfg_opt_t
,cfgval_t
tocfg_value_t
,cfgbool_t
tocfg_bool_t
) cfg_free_val()
renamed tocfg_free_value()
- Lexer symbols now uses prefix
cfg_
to ease linking with other lexers - Sections with same title are always overwritten
- Lists can now have (complete) default values in the form of a string that is parsed in the same way as the config file (see doc examples)
- Added support for building as a DLL on Windows
- Included project files for Borland C Builder 6.0
- Included project files for Dev-Cpp 5.0
- Included project files for MS Visual Studio
- Pre-built documentation now included in the source tarball
- Fixed the
cfg_tilde_expand
function - Fixed and extended the example programs
- Forgot to close the file in
cfg_parse()
- Memory leaks fixed (checked with valgrind)
- added callback support
- fixed segfault due to uninitialized user-defined error function
- changed name to libConfuse (libcfg was way too common)
- Don't build shared libraries by default (only static)
- More Swedish translations
- Implemented the
cfg_free()
function (previous versions had only a stub) - New function:
cfg_free_val()
- updated the manual