From: <cw...@us...> - 2007-08-12 11:24:19
|
Revision: 483 http://rdfapi-php.svn.sourceforge.net/rdfapi-php/?rev=483&view=rev Author: cweiske Date: 2007-08-12 04:24:06 -0700 (Sun, 12 Aug 2007) Log Message: ----------- Fix bug #1772578: N3Parser infinite loop Modified Paths: -------------- trunk/rdfapi-php/api/syntax/N3Parser.php trunk/rdfapi-php/test/unit/Syntax/n3Parser_test.php Modified: trunk/rdfapi-php/api/syntax/N3Parser.php =================================================================== --- trunk/rdfapi-php/api/syntax/N3Parser.php 2007-08-12 11:03:13 UTC (rev 482) +++ trunk/rdfapi-php/api/syntax/N3Parser.php 2007-08-12 11:24:06 UTC (rev 483) @@ -68,7 +68,7 @@ **/ function N3Parser() { //Regular expressions: - $Name = '[A-Za-z0-9_@\.]+[^\.,;\[\]\s ]*'; + $Name = '[A-Za-z0-9_@\.]+[^\.,;\[\]\s\) ]*'; $URI = '<[^> ]*>'; $bNode = '_:'.$Name; $Univar = '\?'.$Name; @@ -439,7 +439,6 @@ $res=array(); preg_match_all($this->Tokens, $s, $newres); - $res=$this->array_concat($res, array_map('trim', $newres[0])); return $res; Modified: trunk/rdfapi-php/test/unit/Syntax/n3Parser_test.php =================================================================== --- trunk/rdfapi-php/test/unit/Syntax/n3Parser_test.php 2007-08-12 11:03:13 UTC (rev 482) +++ trunk/rdfapi-php/test/unit/Syntax/n3Parser_test.php 2007-08-12 11:24:06 UTC (rev 483) @@ -8,7 +8,7 @@ * Tests the N3Parser * * @version $Id$ - * @author Tobias Gau\xDF <tob...@we...> + * @author Tobias Gau� <tob...@we...> * * @package unittests * @access public @@ -17,7 +17,7 @@ class testN3Parser extends UnitTestCase { function testN3Parser() { $this->UnitTestCase(); - + $_SESSION['n3TestInput']=' @prefix p: <http://www.example.org/personal_details#> . @prefix m: <http://www.example.org/meeting_organization#> . @@ -26,7 +26,7 @@ p:GivenName "Fred"; p:hasEmail <mailto:fr...@ex...>; m:attending <http://meetings.example.com/cal#m1> . - + <http://meetings.example.com/cal#m1> m:homePage <http://meetings.example.com/m1/hp> . '; @@ -34,20 +34,20 @@ } function testIsMemmodel() { - + // Import Package include_once(RDFAPI_INCLUDE_DIR.PACKAGE_SYNTAX_N3); $n3pars= new N3Parser(); - $model=$n3pars->parse2model($_SESSION['n3TestInput'],false); + $model=$n3pars->parse2model($_SESSION['n3TestInput'],false); $this->assertIsA($model, 'memmodel'); } - + function testParsing() { - + $n3pars= new N3Parser(); - $model=$n3pars->parse2model($_SESSION['n3TestInput'],false); - - + $model=$n3pars->parse2model($_SESSION['n3TestInput'],false); + + $model2 = new MemModel(); // Ceate new statements and add them to the model @@ -63,17 +63,17 @@ $statement4 = new Statement(new Resource("http://meetings.example.com/cal#m1"), new Resource("http://www.example.org/meeting_organization#homePage"), new Resource("http://meetings.example.com/m1/hp")); - - + + $model2->add($statement1); $model2->add($statement2); $model2->add($statement3); $model2->add($statement4); - + $this->assertTrue($model->containsAll($model2)); } - + function testPrefixNotDeclared() { $rdfInput=' @prefix m: <http://www.example.org/meeting_organization#>. @@ -85,11 +85,11 @@ '; $n3pars= new N3Parser(); - $model=$n3pars->parse2model($rdfInput,false); - //var_dump($model); + $model=$n3pars->parse2model($rdfInput,false); + //var_dump($model); $this->assertErrorPattern('[Prefix not declared: p:]'); } - + function testLoneSemicolon() { $n3 = '<a> <b> <c> ; .'; $parser = &new N3Parser(); @@ -97,5 +97,14 @@ $this->assertEqual(1, $model->size()); $this->assertNoErrors(); } + + function testTightClosingList() { + $n3 = '@prefix : <http://www.w3.org/2001/sw/DataAccess/tests/data-r2/syntax-sparql4/manifest#> . + @prefix mf: <http://www.w3.org/2001/sw/DataAccess/tests/test-manifest#> . + <> mf:entries ( mf:syn-09) .'; + $parser = &new N3Parser(); + $model = &$parser->parse2model($n3, false); + //if bug occured, the parser would be in an endless loop + } } ?> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |