From 29ade1d9b971bb14746bab5ec57db0e204c9e137 Mon Sep 17 00:00:00 2001 From: Alexander Kampmann Date: Thu, 15 Mar 2012 10:51:22 +0100 Subject: [PATCH 1/8] another test for xmlify --- tests/xss_filter_test.php | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/tests/xss_filter_test.php b/tests/xss_filter_test.php index d7dcf0472..3fb6ac310 100644 --- a/tests/xss_filter_test.php +++ b/tests/xss_filter_test.php @@ -27,11 +27,32 @@ class AntiXSSTest extends PHPUnit_Framework_TestCase { */ public function testXmlify() { $text="I want to break\n this!11!"; - $xml=xmlify($text); //test whether it actually may be part of a xml document + $xml=xmlify($text); $retext=unxmlify($text); $this->assertEquals($text, $retext); } + + /** + * xmlify and put in a document + */ + public function testXmlifyDocument() { + $tag="I want to break"; + $xml=xmlify($tag); + $text=''.$xml.''; + + $xml_parser=xml_parser_create(); + //should be possible to parse it + $values=array(); $index=array(); + $this->assertEquals(1, xml_parse_into_struct($xml_parser, $text, $values, $index)); + + $this->assertEquals(array('TEXT'=>array(0)), + $index); + $this->assertEquals(array(array('tag'=>'TEXT', 'type'=>'complete', 'level'=>1, 'value'=>$tag)), + $values); + + xml_parser_free($xml_parser); + } /** * test hex2bin and reverse From 9796e99fa8378758c4fe0f655b7c192f8fc1690f Mon Sep 17 00:00:00 2001 From: Alexander Kampmann Date: Thu, 15 Mar 2012 11:45:06 +0100 Subject: [PATCH 2/8] added simple build-in profiling --- boot.php | 2 +- database.sql | 11 ++++++++++- index.php | 1 + update.php | 16 ++++++++++++++++ util/profiler.php | 36 ++++++++++++++++++++++++++++++++++++ 5 files changed, 64 insertions(+), 2 deletions(-) create mode 100755 util/profiler.php diff --git a/boot.php b/boot.php index b30f02c9f..e2494092d 100755 --- a/boot.php +++ b/boot.php @@ -11,7 +11,7 @@ require_once('include/cache.php'); define ( 'FRIENDICA_PLATFORM', 'Friendica'); define ( 'FRIENDICA_VERSION', '2.3.1278' ); define ( 'DFRN_PROTOCOL_VERSION', '2.22' ); -define ( 'DB_UPDATE_VERSION', 1131 ); +define ( 'DB_UPDATE_VERSION', 1132 ); define ( 'EOL', "
\r\n" ); define ( 'ATOM_TIME', 'Y-m-d\TH:i:s\Z' ); diff --git a/database.sql b/database.sql index 35c257f02..f8d4c7fc2 100755 --- a/database.sql +++ b/database.sql @@ -857,4 +857,13 @@ INDEX ( `ham` ), INDEX ( `term` ) ) ENGINE = MyISAM DEFAULT CHARSET=utf8; - +CREATE TABLE IF NOT EXISTS `profiling` ( +`id` INT NOT NULL AUTO_INCREMENT PRIMARY_KEY , +`function` VARCHAR(255) NOT NULL, +`file` VARCHAR(255) NOT NULL, +`line` INT NOT NULL DEFAULT '-1', +`class` VARCHAR(255), +`time` FLOAT(10, 2) NOT NULL, +INDEX(`function`), +INDEX(`file`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; diff --git a/index.php b/index.php index 5f6d74adb..688eee2ee 100755 --- a/index.php +++ b/index.php @@ -41,6 +41,7 @@ require_once("dba.php"); $db = new dba($db_host, $db_user, $db_pass, $db_data, $install); unset($db_host, $db_user, $db_pass, $db_data); +require_once('util/profiler.php'); if(! $install) { diff --git a/update.php b/update.php index c29394b48..36116341a 100755 --- a/update.php +++ b/update.php @@ -1122,3 +1122,19 @@ function update_1130() { q("ALTER TABLE `item` ADD `file` MEDIUMTEXT NOT NULL AFTER `inform`, ADD FULLTEXT KEY (`file`) "); } +/** + * CREATE TABLE for profiling + */ +function update_1132() { + q("CREATE TABLE IF NOT EXISTS `profiling` ( +`id` INT NOT NULL AUTO_INCREMENT PRIMARY_KEY , +`function` VARCHAR(255) NOT NULL, +`file` VARCHAR(255) NOT NULL, +`line` INT NOT NULL DEFAULT '-1', +`class` VARCHAR(255), +`time` FLOAT(10, 2) NOT NULL, +INDEX(`function`), +INDEX(`file`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; "); +} + diff --git a/util/profiler.php b/util/profiler.php new file mode 100755 index 000000000..3a3de5373 --- /dev/null +++ b/util/profiler.php @@ -0,0 +1,36 @@ + Date: Thu, 15 Mar 2012 12:55:49 +0100 Subject: [PATCH 3/8] integrated profiler --- database.sql | 18 +++++++++--------- update.php | 22 +++++++++++----------- util/profiler.php | 27 ++++++--------------------- 3 files changed, 26 insertions(+), 41 deletions(-) diff --git a/database.sql b/database.sql index f8d4c7fc2..e07e9e070 100755 --- a/database.sql +++ b/database.sql @@ -858,12 +858,12 @@ INDEX ( `term` ) ) ENGINE = MyISAM DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `profiling` ( -`id` INT NOT NULL AUTO_INCREMENT PRIMARY_KEY , -`function` VARCHAR(255) NOT NULL, -`file` VARCHAR(255) NOT NULL, -`line` INT NOT NULL DEFAULT '-1', -`class` VARCHAR(255), -`time` FLOAT(10, 2) NOT NULL, -INDEX(`function`), -INDEX(`file`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; +`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , +`function` VARCHAR( 255 ) NOT NULL , +`file` VARCHAR( 255 ) NOT NULL , +`line` INT NOT NULL DEFAULT '-1', +`class` VARCHAR( 255 ) NOT NULL , +`time` FLOAT( 10, 2 ) NOT NULL , +INDEX ( `function` ) , +INDEX ( `file` ) +) ENGINE = MyISAM DEFAULT CHARSET=utf8; diff --git a/update.php b/update.php index 36116341a..8c8a2a5e4 100755 --- a/update.php +++ b/update.php @@ -1,6 +1,6 @@ Date: Thu, 22 Mar 2012 12:43:03 +0100 Subject: [PATCH 4/8] tests for the template engine --- include/template_processor.php | 2 +- tests/template_test.php | 224 +++++++++++++++++++++++++++++++++ 2 files changed, 225 insertions(+), 1 deletion(-) create mode 100755 tests/template_test.php diff --git a/include/template_processor.php b/include/template_processor.php index 8671587fc..06c49a708 100755 --- a/include/template_processor.php +++ b/include/template_processor.php @@ -80,7 +80,7 @@ */ private function _replcb_for($args){ $m = array_map('trim', explode(" as ", $args[2])); - list($keyname, $varname) = explode("=>",$m[1]); + @list($keyname, $varname) = explode("=>",$m[1]); if (is_null($varname)) { $varname=$keyname; $keyname=""; } if ($m[0]=="" || $varname=="" || is_null($varname)) die("template error: 'for ".$m[0]." as ".$varname."'") ; //$vals = $this->r[$m[0]]; diff --git a/tests/template_test.php b/tests/template_test.php new file mode 100755 index 000000000..1f9f80531 --- /dev/null +++ b/tests/template_test.php @@ -0,0 +1,224 @@ +assertTrue(is_null($second)); + } + + public function testSimpleVariableString() { + $tpl='Hello $name!'; + + $text=replace_macros($tpl, array('$name'=>'Anna')); + + $this->assertEquals('Hello Anna!', $text); + } + + public function testSimpleVariableInt() { + $tpl='There are $num new messages!'; + + $text=replace_macros($tpl, array('$num'=>172)); + + $this->assertEquals('There are 172 new messages!', $text); + } + + public function testConditionalElse() { + $tpl='There{{ if $num!=1 }} are $num new messages{{ else }} is 1 new message{{ endif }}!'; + + $text1=replace_macros($tpl, array('$num'=>1)); + $text22=replace_macros($tpl, array('$num'=>22)); + + $this->assertEquals('There is 1 new message!', $text1); + $this->assertEquals('There are 22 new messages!', $text22); + } + + public function testConditionalNoElse() { + $tpl='{{ if $num!=0 }}There are $num new messages!{{ endif }}'; + + $text0=replace_macros($tpl, array('$num'=>0)); + $text22=replace_macros($tpl, array('$num'=>22)); + + $this->assertEquals('', $text0); + $this->assertEquals('There are 22 new messages!', $text22); + } + + public function testConditionalFail() { + $tpl='There {{ if $num!=1 }} are $num new messages{{ else }} is 1 new message{{ endif }}!'; + + $text1=replace_macros($tpl, array()); + + //$this->assertEquals('There is 1 new message!', $text1); + } + + public function testSimpleFor() { + $tpl='{{ for $messages as $message }} $message {{ endfor }}'; + + $text=replace_macros($tpl, array('$messages'=>array('message 1', 'message 2'))); + + $this->assertEquals(' message 1 message 2 ', $text); + } + + public function testFor() { + $tpl='{{ for $messages as $message }} from: $message.from to $message.to {{ endfor }}'; + + $text=replace_macros($tpl, array('$messages'=>array(array('from'=>'Mike', 'to'=>'Alex'), array('from'=>'Alex', 'to'=>'Mike')))); + + $this->assertEquals(' from: Mike to Alex from: Alex to Mike ', $text); + } + + public function testKeyedFor() { + $tpl='{{ for $messages as $from=>$to }} from: $from to $to {{ endfor }}'; + + $text=replace_macros($tpl, array('$messages'=>array('Mike'=>'Alex', 'Sven'=>'Mike'))); + + $this->assertEquals(' from: Mike to Alex from: Sven to Mike ', $text); + } + + public function testForEmpty() { + $tpl='messages: {{for $messages as $message}} from: $message.from to $message.to {{ endfor }}'; + + $text=replace_macros($tpl, array('$messages'=>array())); + + $this->assertEquals('messages: ', $text); + } + + public function testForWrongType() { + $tpl='messages: {{for $messages as $message}} from: $message.from to $message.to {{ endfor }}'; + + $text=replace_macros($tpl, array('$messages'=>11)); + + $this->assertEquals('messages: ', $text); + } + + public function testForConditional() { + $tpl='new messages: {{for $messages as $message}}{{ if $message.new }} $message.text{{endif}}{{ endfor }}'; + + $text=replace_macros($tpl, array('$messages'=>array( + array('new'=>true, 'text'=>'new message'), + array('new'=>false, 'text'=>'old message')))); + + $this->assertEquals('new messages: new message', $text); + } + + public function testConditionalFor() { + $tpl='{{ if $enabled }}new messages:{{for $messages as $message}} $message.text{{ endfor }}{{endif}}'; + + $text=replace_macros($tpl, array('$enabled'=>true, + '$messages'=>array( + array('new'=>true, 'text'=>'new message'), + array('new'=>false, 'text'=>'old message')))); + + $this->assertEquals('new messages: new message old message', $text); + } + + public function testFantasy() { + $tpl='Fantasy: {{fantasy $messages}}'; + + $text=replace_macros($tpl, array('$messages'=>'no no')); + + $this->assertEquals('Fantasy: {{fantasy no no}}', $text); + } + + public function testInc() { + $tpl='{{inc field_input.tpl with $field=$myvar}}{{ endinc }}'; + + $text=replace_macros($tpl, array('$myvar'=>array('myfield', 'label', 'value', 'help'))); + + $this->assertEquals(" \n" + ."
\n" + ." \n" + ." \n" + ." help\n" + ."
\n", $text); + } + + public function testIncNoVar() { + $tpl='{{inc field_input.tpl }}{{ endinc }}'; + + $text=replace_macros($tpl, array('$field'=>array('myfield', 'label', 'value', 'help'))); + + $this->assertEquals(" \n
\n \n" + ." \n" + ." help\n" + ."
\n", $text); + } + + public function testDoubleUse() { + $tpl='Hello $name! {{ if $enabled }} I love you! {{ endif }}'; + + $text=replace_macros($tpl, array('$name'=>'Anna', '$enabled'=>false)); + + $this->assertEquals('Hello Anna! ', $text); + + $tpl='Hey $name! {{ if $enabled }} I hate you! {{ endif }}'; + + $text=replace_macros($tpl, array('$name'=>'Max', '$enabled'=>true)); + + $this->assertEquals('Hey Max! I hate you! ', $text); + } + + public function testIncDouble() { + $tpl='{{inc field_input.tpl with $field=$var1}}{{ endinc }}' + .'{{inc field_input.tpl with $field=$var2}}{{ endinc }}'; + + $text=replace_macros($tpl, array('$var1'=>array('myfield', 'label', 'value', 'help'), + '$var2'=>array('myfield2', 'label2', 'value2', 'help2'))); + + $this->assertEquals(" \n" + ."
\n" + ." \n" + ." \n" + ." help\n" + ."
\n" + ." \n" + ."
\n" + ." \n" + ." \n" + ." help2\n" + ."
\n", $text); + } +} \ No newline at end of file From 29900febb341cfbec6e4445d4ea1c2dc782a521a Mon Sep 17 00:00:00 2001 From: Alexander Kampmann Date: Thu, 22 Mar 2012 12:45:11 +0100 Subject: [PATCH 5/8] removed problem from previous commit --- .htaccess | 3 --- 1 file changed, 3 deletions(-) diff --git a/.htaccess b/.htaccess index 5f9531a7e..1df509670 100755 --- a/.htaccess +++ b/.htaccess @@ -5,9 +5,6 @@ AddType audio/ogg .oga Deny from all - -Deny from all - RewriteEngine on From ad9d0dadb3ade47d9ecbe5a0ffea12a8f9c4a96d Mon Sep 17 00:00:00 2001 From: Alexander Kampmann Date: Thu, 22 Mar 2012 12:52:24 +0100 Subject: [PATCH 6/8] removed unneccessary stuff --- index.php | 2 -- util/profiler.php | 21 --------------------- 2 files changed, 23 deletions(-) delete mode 100755 util/profiler.php diff --git a/index.php b/index.php index 688eee2ee..c82b20386 100755 --- a/index.php +++ b/index.php @@ -41,8 +41,6 @@ require_once("dba.php"); $db = new dba($db_host, $db_user, $db_pass, $db_data, $install); unset($db_host, $db_user, $db_pass, $db_data); -require_once('util/profiler.php'); - if(! $install) { /** diff --git a/util/profiler.php b/util/profiler.php deleted file mode 100755 index fe33fe429..000000000 --- a/util/profiler.php +++ /dev/null @@ -1,21 +0,0 @@ - Date: Thu, 22 Mar 2012 13:03:28 +0100 Subject: [PATCH 7/8] removed some new lines to cut down number of changed files --- boot.php | 1 - index.php | 1 + update.php | 1 - 3 files changed, 1 insertion(+), 2 deletions(-) diff --git a/boot.php b/boot.php index 9fc9b7f7e..04e16e64d 100755 --- a/boot.php +++ b/boot.php @@ -9,7 +9,6 @@ require_once('include/nav.php'); require_once('include/cache.php'); define ( 'FRIENDICA_PLATFORM', 'Friendica'); - define ( 'FRIENDICA_VERSION', '2.3.1288' ); define ( 'DFRN_PROTOCOL_VERSION', '2.23' ); define ( 'DB_UPDATE_VERSION', 1133 ); diff --git a/index.php b/index.php index c82b20386..139f0a38b 100755 --- a/index.php +++ b/index.php @@ -41,6 +41,7 @@ require_once("dba.php"); $db = new dba($db_host, $db_user, $db_pass, $db_data, $install); unset($db_host, $db_user, $db_pass, $db_data); + if(! $install) { /** diff --git a/update.php b/update.php index 6231943ec..a69742a94 100755 --- a/update.php +++ b/update.php @@ -1,6 +1,5 @@ Date: Thu, 22 Mar 2012 13:05:34 +0100 Subject: [PATCH 8/8] new lines removed --- database.sql | 1 + index.php | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/database.sql b/database.sql index 13a401464..327b482c0 100755 --- a/database.sql +++ b/database.sql @@ -860,6 +860,7 @@ INDEX ( `ham` ), INDEX ( `term` ) ) ENGINE = MyISAM DEFAULT CHARSET=utf8; + CREATE TABLE IF NOT EXISTS `userd` ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , `username` CHAR( 255 ) NOT NULL, diff --git a/index.php b/index.php index 139f0a38b..5f6d74adb 100755 --- a/index.php +++ b/index.php @@ -41,7 +41,7 @@ require_once("dba.php"); $db = new dba($db_host, $db_user, $db_pass, $db_data, $install); unset($db_host, $db_user, $db_pass, $db_data); - + if(! $install) { /**