diff --git a/src/core/desktopfile/desktopfilereader.cpp b/src/core/desktopfile/desktopfilereader.cpp index 3ef0e77..110b107 100644 --- a/src/core/desktopfile/desktopfilereader.cpp +++ b/src/core/desktopfile/desktopfilereader.cpp @@ -55,6 +55,9 @@ namespace linuxdeploy { if (len > 0 && !((len >= 2 && (line[0] == '/' && line[1] == '/')) || (len >= 1 && line[0] == '#'))) { if (line[0] == '[') { + if (line.find_last_of('[') != 0) + throw ParseError("Multiple opening [ brackets"); + // this line apparently introduces a new section auto closingBracketPos = line.find(']'); auto lastClosingBracketPos = line.find_last_of(']'); diff --git a/tests/core/test_desktopfilereader.cpp b/tests/core/test_desktopfilereader.cpp index 8d8ea4a..906d688 100644 --- a/tests/core/test_desktopfilereader.cpp +++ b/tests/core/test_desktopfilereader.cpp @@ -217,3 +217,11 @@ TEST_F(DesktopFileReaderFixture, testReadBrokenSectionHeaderTooManyClosingBracke ASSERT_THROW(DesktopFileReader reader(ins), ParseError); } + +TEST_F(DesktopFileReaderFixture, testReadBrokenSectionHeaderTooManyOpeningBrackets) { + std::stringstream ins; + ins << "[[Desktop Entry]" << std::endl + << "test=test" << std::endl; + + ASSERT_THROW(DesktopFileReader reader(ins), ParseError); +}