From 928ff24cbca717ac9b39589874b6e8ec17c236b8 Mon Sep 17 00:00:00 2001 From: sdcb Date: Wed, 5 Apr 2017 17:12:32 +0800 Subject: Fix a infinite skip_comment check in Paragraphs.cpp This happens when git not checkout file's line break as CR-LF. When CONTROL file contains comment followed by \n instead of \r\n, there will be a infinite skip_comment check. --- toolsrc/src/Paragraphs.cpp | 2 +- toolsrc/src/tests_paragraph.cpp | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) (limited to 'toolsrc/src') diff --git a/toolsrc/src/Paragraphs.cpp b/toolsrc/src/Paragraphs.cpp index 98eb64328..010da6700 100644 --- a/toolsrc/src/Paragraphs.cpp +++ b/toolsrc/src/Paragraphs.cpp @@ -34,7 +34,7 @@ namespace vcpkg::Paragraphs void skip_comment(char& ch) { - while (ch != '\r') + while (ch != '\r' && ch != '\n' && ch != '\0') next(ch); if (ch == '\r') next(ch); diff --git a/toolsrc/src/tests_paragraph.cpp b/toolsrc/src/tests_paragraph.cpp index ba972f437..10a84b703 100644 --- a/toolsrc/src/tests_paragraph.cpp +++ b/toolsrc/src/tests_paragraph.cpp @@ -289,6 +289,16 @@ namespace UnitTest1 Assert::AreEqual("v4", pghs[1]["f4"].c_str()); } + TEST_METHOD(parse_comment_before_single_slashN) + { + const char* str = + "f1: v1\r\n" + "#comment\n"; + auto pghs = vcpkg::Paragraphs::parse_paragraphs(str).value_or_exit(VCPKG_LINE_INFO); + Assert::AreEqual(size_t(1), pghs[0].size()); + Assert::AreEqual("v1", pghs[0]["f1"].c_str()); + } + TEST_METHOD(BinaryParagraph_serialize_min) { std::stringstream ss; -- cgit v1.2.3