Skip to content
Snippets Groups Projects
Commit e1aacf96 authored by Bienchen's avatar Bienchen
Browse files

Fixes infinite loop problem in the StarParser (BZDNG-298).

parent a642faca
No related branches found
No related tags found
No related merge requests found
...@@ -247,7 +247,9 @@ void StarParser::ParseLoop() ...@@ -247,7 +247,9 @@ void StarParser::ParseLoop()
this->ParseMultilineValue(s, true); this->ParseMultilineValue(s, true);
} }
break; break;
case 'd': case '_':
return;
case 'd':
if (tline.length()>=5 && StringRef("data_", 5)==tline.substr(0, 5)) { if (tline.length()>=5 && StringRef("data_", 5)==tline.substr(0, 5)) {
return; return;
} }
...@@ -255,8 +257,6 @@ void StarParser::ParseLoop() ...@@ -255,8 +257,6 @@ void StarParser::ParseLoop()
if (StringRef("loop_", 5)==tline) { if (StringRef("loop_", 5)==tline) {
return; return;
} }
case '_':
return;
default: default:
if (process_rows) { if (process_rows) {
int before=columns.size(); int before=columns.size();
......
...@@ -284,10 +284,11 @@ BOOST_AUTO_TEST_CASE(star_multi) ...@@ -284,10 +284,11 @@ BOOST_AUTO_TEST_CASE(star_multi)
BOOST_AUTO_TEST_CASE(star_loop) BOOST_AUTO_TEST_CASE(star_loop)
{ {
BOOST_MESSAGE(" Running star_loop tests...");
std::ifstream s("testfiles/loop.cif"); std::ifstream s("testfiles/loop.cif");
LoopTestParser star_p(s); LoopTestParser star_p(s);
star_p.Parse(); 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][1], "2");
BOOST_CHECK_EQUAL(star_p.lines[0][2], "3"); BOOST_CHECK_EQUAL(star_p.lines[0][2], "3");
...@@ -306,12 +307,15 @@ BOOST_AUTO_TEST_CASE(star_loop) ...@@ -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][0], "13");
BOOST_CHECK_EQUAL(star_p.lines[4][1], "14"); BOOST_CHECK_EQUAL(star_p.lines[4][1], "14");
BOOST_CHECK_EQUAL(star_p.lines[4][2], "15"); BOOST_CHECK_EQUAL(star_p.lines[4][2], "15");
BOOST_MESSAGE(" done.");
} }
BOOST_AUTO_TEST_CASE(star_items_as_row) BOOST_AUTO_TEST_CASE(star_items_as_row)
{ {
BOOST_MESSAGE(" Running star_items_as_row tests...");
std::ifstream s("testfiles/items-as-row.cif"); std::ifstream s("testfiles/items-as-row.cif");
ItemsAsRowTestParser star_p(s); ItemsAsRowTestParser star_p(s);
BOOST_MESSAGE(" checking parsing abilities...");
star_p.Parse(); star_p.Parse();
BOOST_CHECK_EQUAL(star_p.s1, "a"); BOOST_CHECK_EQUAL(star_p.s1, "a");
BOOST_CHECK_EQUAL(star_p.s2, "a b c"); BOOST_CHECK_EQUAL(star_p.s2, "a b c");
...@@ -330,6 +334,8 @@ BOOST_AUTO_TEST_CASE(star_items_as_row) ...@@ -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.s6, "1.22");
BOOST_CHECK_EQUAL(star_p.s7, "1.33"); BOOST_CHECK_EQUAL(star_p.s7, "1.33");
BOOST_CHECK_EQUAL(star_p.s8, "1.44"); BOOST_CHECK_EQUAL(star_p.s8, "1.44");
BOOST_MESSAGE(" done.");
BOOST_MESSAGE(" done.");
} }
BOOST_AUTO_TEST_CASE(star_missing_data) BOOST_AUTO_TEST_CASE(star_missing_data)
......
...@@ -4,7 +4,8 @@ loop_ ...@@ -4,7 +4,8 @@ loop_
_loop.s1 _loop.s1
_loop.s2 _loop.s2
_loop.s3 _loop.s3
1 2 3 # the 'd' is needed to test for BZDNG-298
d 2 3
'4 x' 5 6 '4 x' 5 6
7 8 7 8
; ;
...@@ -17,4 +18,4 @@ _loop.s3 ...@@ -17,4 +18,4 @@ _loop.s3
13 13
;14 ;14
; ;
15 15
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment