RELEASE-1.0.3 (30-Jan-2005) =========================== -- Incorporated changes from Jon Leonard for building on Solaris with Sun's C compiler instead of GCC. -- Added this log of changes to the distribution, and removed safestr-c99.h from the distribution (this file is automatically generated--how did that get into EXTRA_DIST?!?!?!) -- Fixed safestr_join() so that if the joiner string is a temporary and the list of strings to join together is empty, the joiner string will be freed as expected. -- Fixed safestr_resize() to copy the null terminator not normally included in a string's length upon growth. -- Fixed safestr_search() in a forward direction to properly find the substring in a string when the substring and string are the same. -- Added new convenience APIs: safestr_asprintf(), safestr_vasprintf(), safestr_startswith(), and safestr_endswith() -- Fixed string comparison functions to return proper results when the two strings are of differing lengths and a limit is specified. -- Fixed string comparison functions to do a quick pointer check as appropriate in an effort to possibly speed comparison. NOTE: The changes documented for SafeStr release prior to 1.0.3 were found by comparing the versions; a change log was not well kept. In some cases, the changes were extensive, and a completely accurate log of the changes was very difficult to ascertain. The list of changes below should not be considered 100% accurate. RELEASE-1.0.2 (19-Nov-2003) =========================== -- Removed the man pages contributed by Jose Nazario from the installation. They are still present in the distribution, however. The man pages have been removed because they are out of date. -- Added a new flag to configure, --enable-profile, which will enable the GCC flags for building with profiling information. This flag may not work with compilers other than GCC. Patches welcome. -- Changed reference counts from 16-bit integers mixed in with the string's flags to a separate 32-bit integer. -- Fixed output functions in the printf-style formatting functions to not throw an exception if there's nothing to be written. This only happens on some platforms (Linux is the only one found so far), because fwrite() returns 0 even when the size argument is 0, regardless of the nmemb argument. -- Fixed the printf-style formatting functions to properly convert integer values evenly divisible by 10, but greater than 10 without adding an extra zero on the end! -- Properly deal with reference counts for %s SafeStr strings in the printf- style formatting functions so that SAFESTR_TEMP strings get freed as they should. -- Fixed the internal string resizing function to properly adjust reference counts in a reallocated string that gets copied from another. -- Fixed XXL asset management on strings so that a string saved as an asset outside of SafeStr that gets a new pointer value as the result of a resize gets the asset updated automatically. RELEASE-1.0.1 (16-Sep-2003) =========================== -- Fixed a benign compiler warning that somehow managed to get overloooked in the previous release. -- Changed string handling so that strings with a reference count > 1 become implicitly immutable. That is, safestr_isreadonly() may return 0, but the string is still immutable because of its reference count. RELEASE-1.0.0 (10-Sep-2003) =========================== NOTE: This release introduced several binary incompatibilities from 0.9.6. You must recompile and relink anything that used 0.9.6 to use 1.0.0. -- Updated the version of XXL bundled with SafeStr from 0.9.5 to 1.0.0. -- Fixed a broken type definition in the generated safestr-c99.h on some platforms (intmax_t was being defined twice when one of them should have been uintmax_t). -- Modified memory allocation functions to pass __FILE__ and __LINE__ along with them for tracing and debugging purposes. Fixed internal string reallocation functions to better handle XXL asset management. This change means that the signatures for malloc, realloc, and free functions have changed. -- Changed the printf-style formatting functions to allow a NULL pointer to be passed for a %s format specifier. In such a case, the string "(null)" is used instead of throwing an exception. -- Fixed bake_cookie(), which is used to get a random value that is stored with every string, to handle the case where 0 is the random value chosen. -- Fixed length calculations in safestr_duplicate() when SAFESTR_COPY_LIMIT is used. -- Fixed a few places where string tainting information would get corrupted if an exception was thrown before the string modification operation could complete. -- Changed safestr_reference() to return the string being referenced instead of its original reference count. -- Fixed safestr_replace() to zero trimmed memory in a string if the resulting string is shorter than the original string as a result of the replacements made. -- Added a new flag, SAFESTR_FIND_CHARACTER, to safestr_search() that will allow searching for a single character instead of a sub-string. -- Changed some of SafeStr's error codes to map to standard C error codes where appropriate. For example, SAFESTR_ERROR_OUT_OF_MEMORY is the same as ENOMEM now. Adjusted the other error codes to be contiguous to correct for the gaps introduced by the mapping to C error codes. -- Added a new macro, SAFESTR_TEMP_TRUSTED, that is the same as SAFESTR_TEMP, except that it also includes the SAFESTR_TRUSTED flag on the resulting SafeStr string. -- Added new macros, safestr_findchar() and safestr_rfindchar(), to take advantage of the new SAFESTR_FIND_CHARACTER flag for safestr_search(). -- Changed several API functions that allocate memory to be macros that pass __FILE__ and __LINE__ information. The original API functions have been renamed and should not generally be called directly. -- Fixed a variety of compiler warnings. -- Fixed title-case conversion. -- Fixed safestr_readline() so that it won't loop infinitely in certain conditions. RELEASE-0.9.6 (11-Jun-2003) =========================== -- Added XXL 0.9.5 to the distribution to be built as part of SafeStr if it hasn't been built and installed separately. -- Added a 'check' target to make to run a suite of tests to verify the integrity of the built SafeStr library. -- Added a new header file that will be installed called safestr-c99.h, which contains basic definitions for standard C99 integer types. Note that this header is not a complete replacement for the C99 stdint.h header, instead including only what SafeStr needs and perhaps a little bit more. This header is built dynamically by configure. -- Added libtool versioning to the build process. -- Added man pages contributed by Jose Nazario -- Added a full implementation of printf-style formatting functions to replace what were essentially stubs in the previous release. -- Enhanced the performance of string comparison functions, especially when a case-insensitive comparison is to be performed. -- Added XXL asset management support into SafeStr string allocation API functions. An additional XXL_SAVE after a safestr_alloc() or similar function call is no longer necessary. -- Fixed a problem in safestr_concatenate() where the lengths were not being calculated correctly. -- Fixed safestr_insert() to properly adjust the tainted flag on the target string. -- Fixed length and offset calculations in safestr_insert(). -- Fixed a variety of API functions to no longer depend on a NULL terminator in the string for finding the length of the string. Always use the stored string length instead. -- Fixed the Win32 port to use Win32 string APIs where required instead of standard C runtime APIs (e.g., lstrlenA vs. strlen) -- These changes only affect those functions that use C-style strings, such as safestr_create(). -- Added a variety of convenience functions for converting strings to numeric types (integers and reals); trimming leading and trailing whitespace from a string; converting between lower-, title-, and upper- cases; reading line-by-line from a file; and reading a password from a terminal. RELEASE-0.9.5 (19-May-2003) =========================== Initial Public Release