Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package fast_float for openSUSE:Factory checked in at 2026-06-13 18:45:18 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/fast_float (Old) and /work/SRC/openSUSE:Factory/.fast_float.new.1981 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "fast_float" Sat Jun 13 18:45:18 2026 rev:10 rq:1358812 version:8.2.9 Changes: -------- --- /work/SRC/openSUSE:Factory/fast_float/fast_float.changes 2026-06-09 14:22:50.638886570 +0200 +++ /work/SRC/openSUSE:Factory/.fast_float.new.1981/fast_float.changes 2026-06-13 18:45:39.905263467 +0200 @@ -1,0 +2,7 @@ +Fri Jun 12 04:42:41 UTC 2026 - Jan Engelhardt <[email protected]> + +- Update to release 8.2.9 + * Reject non-digit wide code units in uint8/uint16 integer + fast path. + +------------------------------------------------------------------- Old: ---- fast_float-8.2.8.tar.gz New: ---- fast_float-8.2.9.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ fast_float.spec ++++++ --- /var/tmp/diff_new_pack.6yJb6z/_old 2026-06-13 18:45:42.821384464 +0200 +++ /var/tmp/diff_new_pack.6yJb6z/_new 2026-06-13 18:45:42.853385791 +0200 @@ -17,7 +17,7 @@ Name: fast_float -Version: 8.2.8 +Version: 8.2.9 Release: 0 Summary: Re-implementation of std::from_chars for parsing strings into numbers License: Apache-2.0 OR BSL-1.0 OR MIT ++++++ _scmsync.obsinfo ++++++ --- /var/tmp/diff_new_pack.6yJb6z/_old 2026-06-13 18:45:43.177399235 +0200 +++ /var/tmp/diff_new_pack.6yJb6z/_new 2026-06-13 18:45:43.225401227 +0200 @@ -1,5 +1,5 @@ -mtime: 1780969843 -commit: ff5212b5693b154ad7890f0d001476d22b6f6b7e33c12ad2c1df8d6247a98a8e +mtime: 1781239387 +commit: c08f2b9dd5a51dabcdbfe67518956946a4274d151e6199d8e388f46fc596c2d5 url: https://src.opensuse.org/jengelh/fast_float revision: master ++++++ build.specials.obscpio ++++++ ++++++ build.specials.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/.gitignore new/.gitignore --- old/.gitignore 1970-01-01 01:00:00.000000000 +0100 +++ new/.gitignore 2026-06-12 06:43:07.000000000 +0200 @@ -0,0 +1 @@ +.osc ++++++ fast_float-8.2.8.tar.gz -> fast_float-8.2.9.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fast_float-8.2.8/CMakeLists.txt new/fast_float-8.2.9/CMakeLists.txt --- old/fast_float-8.2.8/CMakeLists.txt 2026-06-08 21:29:36.000000000 +0200 +++ new/fast_float-8.2.9/CMakeLists.txt 2026-06-12 02:29:24.000000000 +0200 @@ -1,7 +1,7 @@ cmake_minimum_required(VERSION 3.14) -project(fast_float VERSION 8.2.8 LANGUAGES CXX) +project(fast_float VERSION 8.2.9 LANGUAGES CXX) set(FASTFLOAT_CXX_STANDARD 11 CACHE STRING "the C++ standard to use for fastfloat") set(CMAKE_CXX_STANDARD ${FASTFLOAT_CXX_STANDARD}) option(FASTFLOAT_TEST "Enable tests" OFF) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fast_float-8.2.8/README.md new/fast_float-8.2.9/README.md --- old/fast_float-8.2.8/README.md 2026-06-08 21:29:36.000000000 +0200 +++ new/fast_float-8.2.9/README.md 2026-06-12 02:29:24.000000000 +0200 @@ -531,7 +531,7 @@ FetchContent_Declare( fast_float GIT_REPOSITORY https://github.com/fastfloat/fast_float.git - GIT_TAG tags/v8.2.8 + GIT_TAG tags/v8.2.9 GIT_SHALLOW TRUE) FetchContent_MakeAvailable(fast_float) @@ -547,7 +547,7 @@ CPMAddPackage( NAME fast_float GITHUB_REPOSITORY "fastfloat/fast_float" - GIT_TAG v8.2.8) + GIT_TAG v8.2.9) ``` ## Using as single header @@ -559,7 +559,7 @@ You may directly download automatically generated single-header files: -<https://github.com/fastfloat/fast_float/releases/download/v8.2.8/fast_float.h> +<https://github.com/fastfloat/fast_float/releases/download/v8.2.9/fast_float.h> ## Benchmarking diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fast_float-8.2.8/include/fast_float/ascii_number.h new/fast_float-8.2.9/include/fast_float/ascii_number.h --- old/fast_float-8.2.8/include/fast_float/ascii_number.h 2026-06-08 21:29:36.000000000 +0200 +++ new/fast_float-8.2.9/include/fast_float/ascii_number.h 2026-06-12 02:29:24.000000000 +0200 @@ -600,7 +600,8 @@ UC const *const start_digits = p; - FASTFLOAT_IF_CONSTEXPR17((std::is_same<T, std::uint8_t>::value)) { + FASTFLOAT_IF_CONSTEXPR17( + (std::is_same<T, std::uint8_t>::value && sizeof(UC) == 1)) { if (base == 10) { const size_t len = (size_t)(pend - p); if (len == 0) { @@ -692,7 +693,8 @@ } } - FASTFLOAT_IF_CONSTEXPR17((std::is_same<T, std::uint16_t>::value)) { + FASTFLOAT_IF_CONSTEXPR17( + (std::is_same<T, std::uint16_t>::value && sizeof(UC) == 1)) { if (base == 10) { const size_t len = size_t(pend - p); if (len == 0) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fast_float-8.2.8/include/fast_float/float_common.h new/fast_float-8.2.9/include/fast_float/float_common.h --- old/fast_float-8.2.8/include/fast_float/float_common.h 2026-06-08 21:29:36.000000000 +0200 +++ new/fast_float-8.2.9/include/fast_float/float_common.h 2026-06-12 02:29:24.000000000 +0200 @@ -18,7 +18,7 @@ #define FASTFLOAT_VERSION_MAJOR 8 #define FASTFLOAT_VERSION_MINOR 2 -#define FASTFLOAT_VERSION_PATCH 8 +#define FASTFLOAT_VERSION_PATCH 9 #define FASTFLOAT_STRINGIZE_IMPL(x) #x #define FASTFLOAT_STRINGIZE(x) FASTFLOAT_STRINGIZE_IMPL(x) @@ -207,7 +207,11 @@ // to a no-op elsewhere (e.g. pre-C++20 MSVC, which has no equivalent hint). #ifdef __has_cpp_attribute #if __has_cpp_attribute(unlikely) >= 201803L -#define FASTFLOAT_USE_UNLIKELY_ATTR 1 +// g++-9 hits hits this branch, but then fails to compile +// [[unlikely]]. This happens only with g++-9. +#if !defined(__GNUC__) || (__GNUC__ != 9) +#define FASTFLOAT_USE_UNLIKELY_ATTR +#endif #endif #endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fast_float-8.2.8/tests/fast_int.cpp new/fast_float-8.2.9/tests/fast_int.cpp --- old/fast_float-8.2.8/tests/fast_int.cpp 2026-06-08 21:29:36.000000000 +0200 +++ new/fast_float-8.2.9/tests/fast_int.cpp 2026-06-12 02:29:24.000000000 +0200 @@ -1295,6 +1295,59 @@ return EXIT_FAILURE; } } + // The uint8_t and uint16_t base-10 paths use a byte-oriented fast path. A + // wider code unit whose low byte is an ASCII digit (e.g. U+2131..U+2139) must + // not be mistaken for that digit. The generic path already rejects these for + // int; the fixed-width fast paths must agree. Lengths of 1..5 exercise both + // the uint8_t path and the 4-digit uint16_t SWAR path. + { + const std::u16string bad16[] = { + u"ℹ", u"ℱℲ", u"ℱℲℳ", u"ℱℲℳℴ", u"ℱℲℳℴℵ", + }; + const std::u32string bad32[] = { + U"ℹ", + U"ℱℲℳ", + U"ℱℲℳℴ", + U"ℱℲℳℴℵ", + }; + bool failed = false; + for (auto const &s : bad16) { + uint8_t r8 = 123; + auto a8 = fast_float::from_chars(s.data(), s.data() + s.size(), r8); + if (a8.ec == std::errc()) { + failed = true; + std::cerr << "Incorrectly parsed wide units as uint8_t " << unsigned(r8) + << "." << std::endl; + } + uint16_t r16 = 123; + auto a16 = fast_float::from_chars(s.data(), s.data() + s.size(), r16); + if (a16.ec == std::errc()) { + failed = true; + std::cerr << "Incorrectly parsed wide units as uint16_t " << r16 << "." + << std::endl; + } + } + for (auto const &s : bad32) { + uint8_t r8 = 123; + auto a8 = fast_float::from_chars(s.data(), s.data() + s.size(), r8); + if (a8.ec == std::errc()) { + failed = true; + std::cerr << "Incorrectly parsed wide units as uint8_t " << unsigned(r8) + << "." << std::endl; + } + uint16_t r16 = 123; + auto a16 = fast_float::from_chars(s.data(), s.data() + s.size(), r16); + if (a16.ec == std::errc()) { + failed = true; + std::cerr << "Incorrectly parsed wide units as uint16_t " << r16 << "." + << std::endl; + } + } + + if (failed) { + return EXIT_FAILURE; + } + } return EXIT_SUCCESS; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fast_float-8.2.8/tests/fixedwidthtest.cpp new/fast_float-8.2.9/tests/fixedwidthtest.cpp --- old/fast_float-8.2.8/tests/fixedwidthtest.cpp 2026-06-08 21:29:36.000000000 +0200 +++ new/fast_float-8.2.9/tests/fixedwidthtest.cpp 2026-06-12 02:29:24.000000000 +0200 @@ -65,6 +65,4 @@ #endif std::cout << "All tests passed successfully." << std::endl; return EXIT_SUCCESS; - - return 0; -} \ No newline at end of file +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fast_float-8.2.8/tests/long_exhaustive32_64.cpp new/fast_float-8.2.9/tests/long_exhaustive32_64.cpp --- old/fast_float-8.2.8/tests/long_exhaustive32_64.cpp 2026-06-08 21:29:36.000000000 +0200 +++ new/fast_float-8.2.9/tests/long_exhaustive32_64.cpp 2026-06-12 02:29:24.000000000 +0200 @@ -45,11 +45,6 @@ std::cerr << "I got " << std::hexfloat << result_value << " but I was expecting " << v << std::endl; abort(); - } else if (std::isnan(v)) { - if (!std::isnan(result_value)) { - std::cerr << "not nan" << buffer << std::endl; - abort(); - } } else if (result_value != v) { std::cerr << "no match ? " << buffer << std::endl; std::cout << "started with " << std::hexfloat << v << std::endl;
