From: Sanket Jadhav Date: Thu, 30 Jul 2026 05:44:21 +0000 (+0000) Subject: fix: handle CRLF line endings in AsciiFile parser X-Git-Url: http://git.ipfire.org/gitweb/index.cgi?a=commitdiff_plain;h=fbbeea4b16768fbbd2c9fa1ba5a9931f6ee31294;p=thirdparty%2Fsnapper.git fix: handle CRLF line endings in AsciiFile parser Signed-off-by: Sanket Jadhav --- diff --git a/snapper/AsciiFile.cc b/snapper/AsciiFile.cc index f1b4d0ca..053fde40 100644 --- a/snapper/AsciiFile.cc +++ b/snapper/AsciiFile.cc @@ -172,6 +172,9 @@ namespace snapper if (n > 0 && buffer[n - 1] == '\n') n--; + if (n > 0 && buffer[n - 1] == '\r') + n--; + line = string(buffer, 0, n); return true; @@ -348,6 +351,8 @@ namespace snapper if (p2) { line += string(p1, p2 - p1); + if (!line.empty() && line.back() == '\r') + line.pop_back(); buffer_read = p2 - buffer.data() + 1; return true; } diff --git a/testsuite/Makefile.am b/testsuite/Makefile.am index a6289e1e..7c28f63e 100644 --- a/testsuite/Makefile.am +++ b/testsuite/Makefile.am @@ -6,7 +6,7 @@ AM_CPPFLAGS = -I$(top_srcdir) $(DBUS_CFLAGS) LDADD = ../snapper/libsnapper.la ../dbus/libdbus.la -lboost_unit_test_framework -check_PROGRAMS = sysconfig-get1.test dirname1.test basename1.test \ +check_PROGRAMS = sysconfig-get1.test sysconfig-crlf.test dirname1.test basename1.test \ equal-date.test cmp-lt.test humanstring.test uuid.test \ table.test table-formatter.test csv-formatter.test json-formatter.test \ getopts.test scan-datetime.test root-prefix.test range.test limit.test @@ -23,7 +23,7 @@ TESTS = $(check_PROGRAMS) AM_DEFAULT_SOURCE_EXT = .cc -EXTRA_DIST = $(noinst_SCRIPTS) sysconfig-get1.txt sysconfig-set1.txt +EXTRA_DIST = $(noinst_SCRIPTS) sysconfig-get1.txt sysconfig-set1.txt sysconfig-crlf.txt equal_date_test_LDADD = -lboost_unit_test_framework ../client/utils/libutils.la diff --git a/testsuite/sysconfig-crlf.cc b/testsuite/sysconfig-crlf.cc new file mode 100644 index 00000000..b6039dba --- /dev/null +++ b/testsuite/sysconfig-crlf.cc @@ -0,0 +1,19 @@ + +#define BOOST_TEST_DYN_LINK +#define BOOST_TEST_MODULE sysconfig_crlf + +#include + +#include + +using namespace snapper; + + +BOOST_AUTO_TEST_CASE(sysconfig_crlf) +{ + SysconfigFile s("sysconfig-crlf.txt"); + + string value; + BOOST_REQUIRE(s.get_value("KEY", value)); + BOOST_CHECK_EQUAL(value, "value"); +} diff --git a/testsuite/sysconfig-crlf.txt b/testsuite/sysconfig-crlf.txt new file mode 100644 index 00000000..5e3aaa19 --- /dev/null +++ b/testsuite/sysconfig-crlf.txt @@ -0,0 +1 @@ +KEY="value"