https://github.com/bfgroup/b2/commit/708353cdeb6006757e7c6971283efb53f718ae25 https://bugs.gentoo.org/970330 Fixed patch path to accommodate $S. From: zyk2507 <93830642+zyk2507@users.noreply.github.com> Date: Sun, 1 Feb 2026 12:36:17 +0800 Subject: [PATCH] Fix crash in var_defines when define string is empty (#535) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fix crash in var_defines when define string is empty b2 aborts in var_defines on empty define * Redo no-value error fix to keep previous flow. Still avoid errors for empty variables, but do so while not early continue, and to keep the use of string_view. --------- Co-authored-by: René Ferdinand Rivera Morell --- a/engine/variable.cpp +++ b/engine/variable.cpp @@ -78,8 +78,14 @@ void var_defines(struct module_t * module, const char * const * e, int preproces for (; *e; ++e) { ::b2::string_view def(*e); - ::b2::string_view var(def.begin(), def.find('=')); - ::b2::string_view val(def.begin() + var.size() + 1); + ::b2::string_view var = def; + ::b2::string_view val; + auto eq = def.find('='); + if (eq != ::b2::string_view::npos) + { + var = ::b2::string_view(def.begin(), eq); + val = ::b2::string_view(def.begin() + eq + 1); + } b2::jam::variable jam_var { module, std::string { var.begin(), var.end() }.c_str() }; // std::printf(">> var_defines: *e = %s\n", *e); @@ -89,7 +95,7 @@ void var_defines(struct module_t * module, const char * const * e, int preproces // } // No value to set var with. - if (var.size() == def.size()) continue; + if (val.empty()) continue; // Skip pre-processing, to just set the raw value. if (preprocess == 0)