diff --git a/src/core/desktopfile/desktopfilereader.cpp b/src/core/desktopfile/desktopfilereader.cpp index 94fd5b3..4818225 100644 --- a/src/core/desktopfile/desktopfilereader.cpp +++ b/src/core/desktopfile/desktopfilereader.cpp @@ -56,8 +56,13 @@ namespace linuxdeploy { !((len >= 2 && (line[0] == '/' && line[1] == '/')) || (len >= 1 && line[0] == '#'))) { if (line[0] == '[') { // this line apparently introduces a new section + auto closingBracketPos = line.find_last_of(']'); + + if (closingBracketPos == std::string::npos) + throw ParseError("No closing ] bracket in section header"); + size_t length = len - 2; - auto title = line.substr(1, line.find(']') - 1); + auto title = line.substr(1, closingBracketPos - 1); // set up the new section sections.insert(std::make_pair(title, DesktopFile::section_t())); diff --git a/tests/core/test_desktopfilereader.cpp b/tests/core/test_desktopfilereader.cpp index e76582a..b4273d7 100644 --- a/tests/core/test_desktopfilereader.cpp +++ b/tests/core/test_desktopfilereader.cpp @@ -201,3 +201,11 @@ TEST_F(DesktopFileReaderFixture, testParseLinesWithMultipleSpaces) { EXPECT_EQ(section["Name"].value(), "What a great name"); } + +TEST_F(DesktopFileReaderFixture, testReadBrokenSectionHeader) { + std::stringstream ins; + ins << "[Desktop Entry" << std::endl + << "test=test" << std::endl; + + ASSERT_THROW(DesktopFileReader reader(ins), ParseError); +}