Repository navigation
1.11.1-rc10 : Resizeable-buffer - #61
Merged
Merged
Conversation
Update NEWS.md, CHANGES.md, and stlsoft.h to reflect the 1.11.1-rc9 release on 12th October 2026.
Add test.unit.stlsoft.util.resizeable_buffer_helpers covering stlsoft::resizeable_buffer_resize for auto_buffer, std::vector, and bool-/void-returning stubs (including failure propagation).
Add top-level CONCEPTS.md covering classic buffer-and-length OS API pitfalls, the probe-then-fill gold standard (null buffer + zero capacity), Resizeable Buffer requirements/models, and the traits rb overload contract; link from README and resizeable_buffer_helpers.hpp.
Align get_home_directory(rb) and get_environment_variable(rb) with the probe-then-fill contract (unchanged rb on probe failure; resizeable_buffer_resize with ENOMEM; env demand includes NUL); add component suite test.component.unixstl.system.system_traits.
Lock the C4 gold path for get_current_directory, get_full_path_name, and get_short_path_name resizeable-buffer overloads: empty auto_buffer and vector callers on unixstl (new paths component suite) and winstl (extended filesystem_traits component suite).
Make unixstl ensure_dir_end(rb) leave a lone-NUL "" unchanged (n > 1, matching winstl and the C-string overload). Make winstl remove_dir_end(rb) shrink size to the post-strip length so a later ensure_dir_end cannot write past the NUL. Add unixstl unit coverage and strengthen winstl size / round-trip assertions.
Add examples/by_concept/resizeable_buffer demonstrating probe-then-fill into auto_buffer and vector via platformstl traits rb overloads, plus a direct resizeable_buffer_resize use; catalogue in EXAMPLES.md and link from CONCEPTS.md.
… (C5) Ensure every resizeable_buffer_resize failure in unixstl/winstl filesystem_traits reports ENOMEM / ERROR_OUTOFMEMORY, including winstl ensure_dir_end(rb) and the unixstl full-path cwd scratch grow; add unit tests with a failing-resize buffer model.
Document the Resizeable Buffer concept at file scope and fully specify resizeable_buffer_resize (parameters, bool/void resize adaptation, retval/failure notes, caller OOM duty); cross-link CONCEPTS.md, the by_concept example, and the helper unit suite.
Add FAQ Q6 linking CONCEPTS.md, resizeable_buffer_helpers, and the by_concept example; record C1–C5 and docs under CHANGES 1.11.1-rc10; add a NEWS chronology row for the concept and traits hardening (no release tag until the version bump).
…t-fail Match WinSTL by stripping all trailing separators in unixstl filesystem_traits remove_dir_end (C-string and rb); replace the non-exception absolutePath failure path in readdir_sequence (broken \'0' write) with an empty-string soft-fail; extend unit tests and CHANGES/NEWS.
Allocate get_full_path_name_impl's temporary with room for the trailing NUL (1 + len, not 1 + (len - 1)) on unixstl and winstl; copy then terminate so the write is in-bounds (WinSTL quoted paths exercise this branch).
mwsis
approved these changes
Oct 15, 2026
…e (G5) Invoke rb.resize(newSize) with SFINAE detection of one-argument bool/ss_bool_t resize so pre-C++11 vector-style resize(size, value=) works without forming an ambiguous &T::resize; extend the VC6 member-pointer path with a two-argument void overload; add unit stub.
* chore(documentation markup): changed Doxygen tag `\remarks` => `\note` * chore(documentation markup): ensuring "NUL character" is the phrasing
* docs(STLSoft): normalise expression-form \pre lines Strip outer parentheses, trailing semicolons, and <code> wrappers from expression-form Doxygen \pre comments so each mirrors assert(E); bump Updated, SIS copyright through 2026, and file *_EDIT on the 14 touched headers. * docs(STLSoft): prefer expression-form \pre with nullptr Convert easy prose preconditions to boolean expressions (!empty(), nullptr != p); replace remaining \pre NULL with nullptr; bump Updated, SIS copyright through 2026, and *_EDIT on each touched header. * docs(STLSoft): finish hard \pre cases where expressible Convert non-null COM and shim_string truncate preconditions to expressions; clean remaining null-or-valid COM prose; leave prior-init, unchecked array index, and exception-gated contracts as prose; bump Updated, SIS copyright, and *_EDIT on touched headers. * docs(STLSoft): put zero-length check before null in \pre Reorder optional-buffer preconditions in console_functions.h to 0 == n || nullptr != s; bump Updated, SIS copyright, and *_EDIT. * docs(STLSoft): normalise Doxygen \pre to bare nullptr expressions Standardise \pre comments as bare boolean expressions (no outer parentheses, no trailing punctuation), prefer nullptr over NULL/prose, put zero-length checks before null checks for optional buffers, and convert expressible empty/length contracts to !empty() / n <= size(); bump Updated, SIS copyright through 2026, and *_EDIT on touched headers.
Provide system_traits get_module_directory(hModule, rb) for ANSI and wide, matching the process-path gold probe-then-fill contract; extend unit coverage for auto_buffer/vector and document in CHANGES/NEWS.
mwsis
marked this pull request as ready for review
October 19, 2026 03:12
mwsis
self-requested a review
October 19, 2026 03:12
mwsis
approved these changes
Oct 19, 2026
Early-return from one-arg ensure_dir_end when the C-string length is zero so GCC -Warray-bounds does not treat the capacity-0 append path as writing past a tiny empty stack buffer under -Werror; apply the same guard in unixstl and winstl (A+W). Correct four TEST_INT_GT argument orders in TEST_get_module_directory to match sibling rb coverage (assert buffer size exceeds returned length).
Drive empty C-string ensure_dir_end coverage through the sized overload with an explicit capacity instead of one-arg on `char dirname[] = "\0"`, which GCC -Warray-bounds / -Wstringop-overflow still treats as an out-of-bounds capacity-0 append under -Werror even with an empty early-out; apply the same pattern in unixstl and winstl unit tests.
GarthJL1965
approved these changes
Oct 19, 2026
synesissoftware
added a commit
that referenced
this pull request
Oct 20, 2026
* 1.11.1-rc10 : docs(stlsoft): add components inventory and mark contract/cover obsolete (#64) * docs(stlsoft): add components inventory and mark contract/cover obsolete Add strategy/COMPONENTS-INVENTORY.md, the working ledger for the STLSoft 1.11.1 components; it is the source for the forthcoming COMPONENTS.md and README Components tables. It holds: - B1/B2 tables of components new in 1.11.x and 1.10.x, with era-coloured since/enh badges; - legacy ledgers C (used by other STLSoft components), D (used by other SIS projects, including weak-only usage) and E (analysis nominations); - a full inventory of include/ by file and by sub-project, with abs level, status, min lang (compile-floor derived), 7-Signs and Diagnosticism-style sub-project versions; - estimated since-badges for legacy components, derived from header Created dates mapped onto the dated CHANGES.md releases; Mark stlsoft/quality/contract.h and cover.h obsolete at the \file level (\brief [C, C++; OBSOLETE]) and refresh their Updated: banners. Refresh Updated:, copyright range and _EDIT counters, and align banner fields, in meta/typefixer/typefixer.hpp, std/cbase_.hpp and winstl/window/colour_constants.h. * docs(readme): add Enhanced column to 1.10 and legacy component tables Show the latest major/minor-version-change tag per header in the "New in 1.10" and "Notable legacy components" tables, and define the column in the section introduction. * 1.11.1-rc10 : Resizeable-buffer (#61) * chore(stlsoft): update for 1.11.1-rc9 release Update NEWS.md, CHANGES.md, and stlsoft.h to reflect the 1.11.1-rc9 release on 12th October 2026. * test(stlsoft): unit-test resizeable_buffer_resize helper Add test.unit.stlsoft.util.resizeable_buffer_helpers covering stlsoft::resizeable_buffer_resize for auto_buffer, std::vector, and bool-/void-returning stubs (including failure propagation). * TODO.md * docs(stlsoft): capture Resizeable Buffer concept in CONCEPTS.md Add top-level CONCEPTS.md covering classic buffer-and-length OS API pitfalls, the probe-then-fill gold standard (null buffer + zero capacity), Resizeable Buffer requirements/models, and the traits rb overload contract; link from README and resizeable_buffer_helpers.hpp. * fix(unixstl): harden home/env resizeable-buffer overloads and cover them Align get_home_directory(rb) and get_environment_variable(rb) with the probe-then-fill contract (unchanged rb on probe failure; resizeable_buffer_resize with ENOMEM; env demand includes NUL); add component suite test.component.unixstl.system.system_traits. * test(stlsoft): cover filesystem_traits path rb overloads Lock the C4 gold path for get_current_directory, get_full_path_name, and get_short_path_name resizeable-buffer overloads: empty auto_buffer and vector callers on unixstl (new paths component suite) and winstl (extended filesystem_traits component suite). * fix(stlsoft): align filesystem_traits ensure/remove_dir_end rb (C2/C3) Make unixstl ensure_dir_end(rb) leave a lone-NUL "" unchanged (n > 1, matching winstl and the C-string overload). Make winstl remove_dir_end(rb) shrink size to the post-strip length so a later ensure_dir_end cannot write past the NUL. Add unixstl unit coverage and strengthen winstl size / round-trip assertions. * docs(stlsoft): add Resizeable Buffer concept example Add examples/by_concept/resizeable_buffer demonstrating probe-then-fill into auto_buffer and vector via platformstl traits rb overloads, plus a direct resizeable_buffer_resize use; catalogue in EXAMPLES.md and link from CONCEPTS.md. * tidy * fix(stlsoft): set OOM last-error on filesystem_traits resize failures (C5) Ensure every resizeable_buffer_resize failure in unixstl/winstl filesystem_traits reports ENOMEM / ERROR_OUTOFMEMORY, including winstl ensure_dir_end(rb) and the unixstl full-path cwd scratch grow; add unit tests with a failing-resize buffer model. * docs(stlsoft): enrich resizeable_buffer_helpers Doxygen (D2) Document the Resizeable Buffer concept at file scope and fully specify resizeable_buffer_resize (parameters, bool/void resize adaptation, retval/failure notes, caller OOM duty); cross-link CONCEPTS.md, the by_concept example, and the helper unit suite. * docs(stlsoft): call out Resizeable Buffer in FAQ, CHANGES, NEWS Add FAQ Q6 linking CONCEPTS.md, resizeable_buffer_helpers, and the by_concept example; record C1–C5 and docs under CHANGES 1.11.1-rc10; add a NEWS chronology row for the concept and traits hardening (no release tag until the version bump). * fix(stlsoft): align unixstl remove_dir_end strip-all; fix readdir soft-fail Match WinSTL by stripping all trailing separators in unixstl filesystem_traits remove_dir_end (C-string and rb); replace the non-exception absolutePath failure path in readdir_sequence (broken \'0' write) with an empty-string soft-fail; extend unit tests and CHANGES/NEWS. * fix(stlsoft): size full-path scratch to 1+len (G6 OOB) Allocate get_full_path_name_impl's temporary with room for the trailing NUL (1 + len, not 1 + (len - 1)) on unixstl and winstl; copy then terminate so the write is in-bounds (WinSTL quoted paths exercise this branch). * fix(stlsoft): support defaulted-arg resize in resizeable_buffer_resize (G5) Invoke rb.resize(newSize) with SFINAE detection of one-argument bool/ss_bool_t resize so pre-C++11 vector-style resize(size, value=) works without forming an ambiguous &T::resize; extend the VC6 member-pointer path with a two-argument void overload; add unit stub. * date * Documentation, commenting, canonicalisation (#57) * chore(documentation markup): changed Doxygen tag `\remarks` => `\note` * chore(documentation markup): ensuring "NUL character" is the phrasing * Preconditions (#56) * docs(STLSoft): normalise expression-form \pre lines Strip outer parentheses, trailing semicolons, and <code> wrappers from expression-form Doxygen \pre comments so each mirrors assert(E); bump Updated, SIS copyright through 2026, and file *_EDIT on the 14 touched headers. * docs(STLSoft): prefer expression-form \pre with nullptr Convert easy prose preconditions to boolean expressions (!empty(), nullptr != p); replace remaining \pre NULL with nullptr; bump Updated, SIS copyright through 2026, and *_EDIT on each touched header. * docs(STLSoft): finish hard \pre cases where expressible Convert non-null COM and shim_string truncate preconditions to expressions; clean remaining null-or-valid COM prose; leave prior-init, unchecked array index, and exception-gated contracts as prose; bump Updated, SIS copyright, and *_EDIT on touched headers. * docs(STLSoft): put zero-length check before null in \pre Reorder optional-buffer preconditions in console_functions.h to 0 == n || nullptr != s; bump Updated, SIS copyright, and *_EDIT. * docs(STLSoft): normalise Doxygen \pre to bare nullptr expressions Standardise \pre comments as bare boolean expressions (no outer parentheses, no trailing punctuation), prefer nullptr over NULL/prose, put zero-length checks before null checks for optional buffers, and convert expressible empty/length contracts to !empty() / n <= size(); bump Updated, SIS copyright through 2026, and *_EDIT on touched headers. * merge fix: removing vestigial duplicate * feat(winstl): add get_module_directory resizeable-buffer overload (G2) Provide system_traits get_module_directory(hModule, rb) for ANSI and wide, matching the process-path gold probe-then-fill contract; extend unit coverage for auto_buffer/vector and document in CHANGES/NEWS. * TODO.md * fix(stlsoft): silence ensure_dir_end GCC bounds; fix module-dir GT args Early-return from one-arg ensure_dir_end when the C-string length is zero so GCC -Warray-bounds does not treat the capacity-0 append path as writing past a tiny empty stack buffer under -Werror; apply the same guard in unixstl and winstl (A+W). Correct four TEST_INT_GT argument orders in TEST_get_module_directory to match sibling rb coverage (assert buffer size exceeds returned length). * test(stlsoft): avoid tiny-stack empty ensure_dir_end under GCC -Werror Drive empty C-string ensure_dir_end coverage through the sized overload with an explicit capacity instead of one-arg on `char dirname[] = "\0"`, which GCC -Warray-bounds / -Wstringop-overflow still treats as an out-of-bounds capacity-0 append under -Werror even with an empty early-out; apply the same pattern in unixstl and winstl unit tests. * Versions (#63) * test(stlsoft): add scratch versions.format using std::format Add test.scratch.versions.format alongside versions.stdio and versions.iostreams, printing each library's dotted version and packed VER via std::format. Gated by a CMake <format> probe and by __cpp_lib_format in the source, so it is skipped on toolchains without std::format. * chore(stlsoft): prepare 1.11.1-rc10 Bump _STLSOFT_VER to 1.11.1-rc10 (_STLSOFT_VER_1_11_1_RC10) and align test.unit.versions, Doxyfile, and INSTALL.md. Record the new test.scratch.versions.format program in CHANGES.md and NEWS.md. * ci(stlsoft): dogfood .cmd runners and adopt install-sis-deps (#66) * ci(stlsoft): dogfood .cmd runners and adopt install-sis-deps Split run steps into Bash and native cmd.exe variants, and replace the inline xTests install with the install-sis-deps composite action, bootstrapping STLSoft from the workspace tree. Define _*STL_VER_RELSTATUS in all eleven subproject headers, aliasing _*STL_VER_ALPHABETA to it. Keep project-specific examples and performance runners. * fix * fix(stlsoft): define _STLSOFT_VER_RELSTATUS for composite VER A partial ALPHABETA→RELSTATUS migration left the composite shifting an undefined _STLSOFT_VER_RELSTATUS (0 in #if), so _STLSOFT_VER collapsed to 0x010B0100 and failed unixstl/winstl/xTests rc9 gates in CI bootstrap.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.