From e1aacf96e8102e4670dc166c82067388e7a21749 Mon Sep 17 00:00:00 2001 From: Stefan Bienert <stefan.bienert@unibas.ch> Date: Tue, 26 Jul 2011 11:21:43 +0200 Subject: [PATCH] Fixes infinite loop problem in the StarParser (BZDNG-298). --- modules/io/src/mol/star_parser.cc | 6 +++--- modules/io/tests/test_star_parser.cc | 8 +++++++- modules/io/tests/testfiles/loop.cif | 5 +++-- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/modules/io/src/mol/star_parser.cc b/modules/io/src/mol/star_parser.cc index 33e235d09..b6f370d8e 100644 --- a/modules/io/src/mol/star_parser.cc +++ b/modules/io/src/mol/star_parser.cc @@ -247,7 +247,9 @@ void StarParser::ParseLoop() this->ParseMultilineValue(s, true); } break; - case 'd': + case '_': + return; + case 'd': if (tline.length()>=5 && StringRef("data_", 5)==tline.substr(0, 5)) { return; } @@ -255,8 +257,6 @@ void StarParser::ParseLoop() if (StringRef("loop_", 5)==tline) { return; } - case '_': - return; default: if (process_rows) { int before=columns.size(); diff --git a/modules/io/tests/test_star_parser.cc b/modules/io/tests/test_star_parser.cc index 871740c04..e72edb632 100644 --- a/modules/io/tests/test_star_parser.cc +++ b/modules/io/tests/test_star_parser.cc @@ -284,10 +284,11 @@ BOOST_AUTO_TEST_CASE(star_multi) BOOST_AUTO_TEST_CASE(star_loop) { + BOOST_MESSAGE(" Running star_loop tests..."); std::ifstream s("testfiles/loop.cif"); LoopTestParser star_p(s); star_p.Parse(); - BOOST_CHECK_EQUAL(star_p.lines[0][0], "1"); + BOOST_CHECK_EQUAL(star_p.lines[0][0], "d"); BOOST_CHECK_EQUAL(star_p.lines[0][1], "2"); BOOST_CHECK_EQUAL(star_p.lines[0][2], "3"); @@ -306,12 +307,15 @@ BOOST_AUTO_TEST_CASE(star_loop) BOOST_CHECK_EQUAL(star_p.lines[4][0], "13"); BOOST_CHECK_EQUAL(star_p.lines[4][1], "14"); BOOST_CHECK_EQUAL(star_p.lines[4][2], "15"); + BOOST_MESSAGE(" done."); } BOOST_AUTO_TEST_CASE(star_items_as_row) { + BOOST_MESSAGE(" Running star_items_as_row tests..."); std::ifstream s("testfiles/items-as-row.cif"); ItemsAsRowTestParser star_p(s); + BOOST_MESSAGE(" checking parsing abilities..."); star_p.Parse(); BOOST_CHECK_EQUAL(star_p.s1, "a"); BOOST_CHECK_EQUAL(star_p.s2, "a b c"); @@ -330,6 +334,8 @@ BOOST_AUTO_TEST_CASE(star_items_as_row) BOOST_CHECK_EQUAL(star_p.s6, "1.22"); BOOST_CHECK_EQUAL(star_p.s7, "1.33"); BOOST_CHECK_EQUAL(star_p.s8, "1.44"); + BOOST_MESSAGE(" done."); + BOOST_MESSAGE(" done."); } BOOST_AUTO_TEST_CASE(star_missing_data) diff --git a/modules/io/tests/testfiles/loop.cif b/modules/io/tests/testfiles/loop.cif index b7c069da4..4846d28ee 100644 --- a/modules/io/tests/testfiles/loop.cif +++ b/modules/io/tests/testfiles/loop.cif @@ -4,7 +4,8 @@ loop_ _loop.s1 _loop.s2 _loop.s3 -1 2 3 +# the 'd' is needed to test for BZDNG-298 +d 2 3 '4 x' 5 6 7 8 ; @@ -17,4 +18,4 @@ _loop.s3 13 ;14 ; -15 \ No newline at end of file +15 -- GitLab