|
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.
|