View Issue Details

This bug affects 1 person(s).
 4
IDProjectCategoryView StatusLast Update
09007Bug reportsLimeSurvey Websitepublic2014-05-02 15:10
Reporterzewood Assigned Toc_schmitz  
PriorityhighSeverityblock 
Status closedResolutionfixed 
Product Version2.05+ 
Fixed in Version2.05+ 
Summary09007: There is a crash when an user wants to create a new survey
Description

Hello,
When an user wants to create a new survey since the last version (2.05+ Build 140422), a crash is coming :
Invalid argument supplied for foreach()

/var/www/limesurvey/framework/vendors/htmlpurifier/HTMLPurifier.standalone.php(1898)

1886 Namespace.Directive => Value
1887
@param $config_array Configuration associative array
1888 */
1889 public function loadArray($config_array) {
1890 if ($this->isFinalized('Cannot load directives after finalization')) return;
1891 foreach ($config_array as $key => $value) {
1892 $key = strreplace('', '.', $key);
1893 if (strpos($key, '.') !== false) {
1894 $this->set($key, $value);
1895 } else {
1896 $namespace = $key;
1897 $namespace_values = $value;
1898 foreach ($namespace_values as $directive => $value) {
1899 $this->set($namespace .'.'. $directive, $value);
1900 }
1901 }
1902 }
1903 }
1904
1905 /*
1906
Returns a list of array(namespace, directive) for all directives
1907 that are allowed in a web-form context as per an allowed
1908
namespaces/directives list.
1909 @param $allowed List of allowed namespaces/directives
1910
/

But, for an admin user there is no crash !!!

TagsNo tags attached.
Attached Files
Capture.JPG (43,505 bytes)   
Capture.JPG (43,505 bytes)   
PHP warning.htm (34,747 bytes)   
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>PHP warning</title>

<style type="text/css">
/*<![CDATA[*/
html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,font,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td{border:0;outline:0;font-size:100%;vertical-align:baseline;background:transparent;margin:0;padding:0;}
body{line-height:1;}
ol,ul{list-style:none;}
blockquote,q{quotes:none;}
blockquote:before,blockquote:after,q:before,q:after{content:none;}
:focus{outline:0;}
ins{text-decoration:none;}
del{text-decoration:line-through;}
table{border-collapse:collapse;border-spacing:0;}

body {
	font: normal 9pt "Verdana";
	color: #000;
	background: #fff;
}

h1 {
	font: normal 18pt "Verdana";
	color: #f00;
	margin-bottom: .5em;
}

h2 {
	font: normal 14pt "Verdana";
	color: #800000;
	margin-bottom: .5em;
}

h3 {
	font: bold 11pt "Verdana";
}

pre {
	font: normal 11pt Menlo, Consolas, "Lucida Console", Monospace;
}

pre span.error {
	display: block;
	background: #fce3e3;
}

pre span.ln {
	color: #999;
	padding-right: 0.5em;
	border-right: 1px solid #ccc;
}

pre span.error-ln {
	font-weight: bold;
}

.container {
	margin: 1em 4em;
}

.version {
	color: gray;
	font-size: 8pt;
	border-top: 1px solid #aaa;
	padding-top: 1em;
	margin-bottom: 1em;
}

.message {
	color: #000;
	padding: 1em;
	font-size: 11pt;
	background: #f3f3f3;
	-webkit-border-radius: 10px;
	-moz-border-radius: 10px;
	border-radius: 10px;
	margin-bottom: 1em;
	line-height: 160%;
}

.source {
	margin-bottom: 1em;
}

.code pre {
	background-color: #ffe;
	margin: 0.5em 0;
	padding: 0.5em;
	line-height: 125%;
	border: 1px solid #eee;
}

.source .file {
	margin-bottom: 1em;
	font-weight: bold;
}

.traces {
	margin: 2em 0;
}

.trace {
	margin: 0.5em 0;
	padding: 0.5em;
}

.trace.app {
	border: 1px dashed #c00;
}

.trace .number {
	text-align: right;
	width: 2em;
	padding: 0.5em;
}

.trace .content {
	padding: 0.5em;
}

.trace .plus,
.trace .minus {
	display:inline;
	vertical-align:middle;
	text-align:center;
	border:1px solid #000;
	color:#000;
	font-size:10px;
	line-height:10px;
	margin:0;
	padding:0 1px;
	width:10px;
	height:10px;
}

.trace.collapsed .minus,
.trace.expanded .plus,
.trace.collapsed pre {
	display: none;
}

.trace-file {
	cursor: pointer;
	padding: 0.2em;
}

.trace-file:hover {
	background: #f0ffff;
}
/*]]>*/
</style>
</head>

<body>
<div class="container">
	<h1>PHP warning</h1>

	<p class="message">
		Invalid argument supplied for foreach()	</p>

	<div class="source">
		<p class="file">/var/www/limesurvey/framework/vendors/htmlpurifier/HTMLPurifier.standalone.php(1898)</p>
		<div class="code"><pre><span class="ln">1886</span>      * Namespace.Directive =&gt; Value
<span class="ln">1887</span>      * @param $config_array Configuration associative array
<span class="ln">1888</span>      */
<span class="ln">1889</span>     public function loadArray($config_array) {
<span class="ln">1890</span>         if ($this-&gt;isFinalized('Cannot load directives after finalization')) return;
<span class="ln">1891</span>         foreach ($config_array as $key =&gt; $value) {
<span class="ln">1892</span>             $key = str_replace('_', '.', $key);
<span class="ln">1893</span>             if (strpos($key, '.') !== false) {
<span class="ln">1894</span>                 $this-&gt;set($key, $value);
<span class="ln">1895</span>             } else {
<span class="ln">1896</span>                 $namespace = $key;
<span class="ln">1897</span>                 $namespace_values = $value;
<span class="error"><span class="ln error-ln">1898</span>                 foreach ($namespace_values as $directive =&gt; $value) {
</span><span class="ln">1899</span>                     $this-&gt;set($namespace .'.'. $directive, $value);
<span class="ln">1900</span>                 }
<span class="ln">1901</span>             }
<span class="ln">1902</span>         }
<span class="ln">1903</span>     }
<span class="ln">1904</span> 
<span class="ln">1905</span>     /**
<span class="ln">1906</span>      * Returns a list of array(namespace, directive) for all directives
<span class="ln">1907</span>      * that are allowed in a web-form context as per an allowed
<span class="ln">1908</span>      * namespaces/directives list.
<span class="ln">1909</span>      * @param $allowed List of allowed namespaces/directives
<span class="ln">1910</span>      */
</pre></div>	</div>

	<div class="traces">
		<h2>Stack Trace</h2>
				<table style="width:100%;">
						<tbody><tr class="trace core collapsed">
			<td class="number">
				#0			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/var/www/limesurvey/framework/vendors/htmlpurifier/HTMLPurifier.standalone.php(1483): <strong>HTMLPurifier_Config</strong>-&gt;<strong>loadArray</strong>(array("AutoFormat.RemoveEmpty"
 =&gt; false, "CSS.AllowTricky" =&gt; true, "HTML.SafeObject" =&gt; 
true, "Output.FlashCompat" =&gt; true, ...))				</div>

				<div class="code"><pre><span class="ln">1478</span>             $ret = HTMLPurifier_Config::createDefault();
<span class="ln">1479</span>         } else {
<span class="ln">1480</span>             $ret = new HTMLPurifier_Config($schema);
<span class="ln">1481</span>         }
<span class="ln">1482</span>         if (is_string($config)) $ret-&gt;loadIni($config);
<span class="error"><span class="ln error-ln">1483</span>         elseif (is_array($config)) $ret-&gt;loadArray($config);
</span><span class="ln">1484</span>         return $ret;
<span class="ln">1485</span>     }
<span class="ln">1486</span> 
<span class="ln">1487</span>     /**
<span class="ln">1488</span>      * Creates a new config object that inherits from a previous one.
</pre></div>			</td>
		</tr>
						<tr class="trace core collapsed">
			<td class="number">
				#1			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/var/www/limesurvey/framework/vendors/htmlpurifier/HTMLPurifier.standalone.php(110): <strong>HTMLPurifier_Config</strong>::<strong>create</strong>(array("AutoFormat.RemoveEmpty"
 =&gt; false, "CSS.AllowTricky" =&gt; true, "HTML.SafeObject" =&gt; 
true, "Output.FlashCompat" =&gt; true, ...))				</div>

				<div class="code"><pre><span class="ln">105</span>      *                The parameter can also be any type that
<span class="ln">106</span>      *                HTMLPurifier_Config::create() supports.
<span class="ln">107</span>      */
<span class="ln">108</span>     public function __construct($config = null) {
<span class="ln">109</span> 
<span class="error"><span class="ln error-ln">110</span>         $this-&gt;config = HTMLPurifier_Config::create($config);
</span><span class="ln">111</span> 
<span class="ln">112</span>         $this-&gt;strategy     = new HTMLPurifier_Strategy_Core();
<span class="ln">113</span> 
<span class="ln">114</span>     }
<span class="ln">115</span> 
</pre></div>			</td>
		</tr>
						<tr class="trace core collapsed">
			<td class="number">
				#2			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/var/www/limesurvey/framework/web/widgets/CHtmlPurifier.php(126): <strong>HTMLPurifier</strong>-&gt;<strong>__construct</strong>(array("AutoFormat.RemoveEmpty"
 =&gt; false, "CSS.AllowTricky" =&gt; true, "HTML.SafeObject" =&gt; 
true, "Output.FlashCompat" =&gt; true, ...))				</div>

				<div class="code"><pre><span class="ln">121</span>      * Create a new HTML Purifier instance.
<span class="ln">122</span>      * @return HTMLPurifier
<span class="ln">123</span>      */
<span class="ln">124</span>     protected function createNewHtmlPurifierInstance()
<span class="ln">125</span>     {
<span class="error"><span class="ln error-ln">126</span>         $this-&gt;_purifier=new HTMLPurifier($this-&gt;getOptions());
</span><span class="ln">127</span>         $this-&gt;_purifier-&gt;config-&gt;set('Cache.SerializerPath',Yii::app()-&gt;getRuntimePath());
<span class="ln">128</span>         return $this-&gt;_purifier;
<span class="ln">129</span>     }
<span class="ln">130</span> }
</pre></div>			</td>
		</tr>
						<tr class="trace core collapsed">
			<td class="number">
				#3			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/var/www/limesurvey/framework/web/widgets/CHtmlPurifier.php(96): <strong>CHtmlPurifier</strong>-&gt;<strong>createNewHtmlPurifierInstance</strong>()				</div>

				<div class="code"><pre><span class="ln">091</span>      * @return CHtmlPurifier
<span class="ln">092</span>      */
<span class="ln">093</span>     public function setOptions($options)
<span class="ln">094</span>     {
<span class="ln">095</span>         $this-&gt;_options=$options;
<span class="error"><span class="ln error-ln">096</span>         $this-&gt;createNewHtmlPurifierInstance();
</span><span class="ln">097</span>         return $this;
<span class="ln">098</span>     }
<span class="ln">099</span>     
<span class="ln">100</span>     /**
<span class="ln">101</span>      * Get the options for the HTML Purifier instance.
</pre></div>			</td>
		</tr>
						<tr class="trace core collapsed">
			<td class="number">
				#4			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/var/www/limesurvey/framework/base/CComponent.php(152): <strong>CHtmlPurifier</strong>-&gt;<strong>setOptions</strong>(array("AutoFormat.RemoveEmpty"
 =&gt; false, "CSS.AllowTricky" =&gt; true, "HTML.SafeObject" =&gt; 
true, "Output.FlashCompat" =&gt; true, ...))				</div>

				<div class="code"><pre><span class="ln">147</span>      */
<span class="ln">148</span>     public function __set($name,$value)
<span class="ln">149</span>     {
<span class="ln">150</span>         $setter='set'.$name;
<span class="ln">151</span>         if(method_exists($this,$setter))
<span class="error"><span class="ln error-ln">152</span>             return $this-&gt;$setter($value);
</span><span class="ln">153</span>         elseif(strncasecmp($name,'on',2)===0 &amp;&amp; method_exists($this,$name))
<span class="ln">154</span>         {
<span class="ln">155</span>             // duplicating getEventHandlers() here for performance
<span class="ln">156</span>             $name=strtolower($name);
<span class="ln">157</span>             if(!isset($this-&gt;_e[$name]))
</pre></div>			</td>
		</tr>
						<tr class="trace app expanded">
			<td class="number">
				#5			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/var/www/limesurvey/application/core/LSYii_Validators.php(105): <strong>CComponent</strong>-&gt;<strong>__set</strong>("options",
 array("AutoFormat.RemoveEmpty" =&gt; false, "CSS.AllowTricky" =&gt; 
true, "HTML.SafeObject" =&gt; true, "Output.FlashCompat" =&gt; true, 
...))				</div>

				<div class="code"><pre><span class="ln">100</span>     * @param string $value
<span class="ln">101</span>     */
<span class="ln">102</span>     public function xssFilter($value)
<span class="ln">103</span>     {
<span class="ln">104</span>         $filter = new CHtmlPurifier();
<span class="error"><span class="ln error-ln">105</span>         $filter-&gt;options = array(
</span><span class="ln">106</span>             'AutoFormat.RemoveEmpty'=&gt;false,
<span class="ln">107</span>             'CSS.AllowTricky'=&gt;true, // Allow display:none; (and other)
<span class="ln">108</span>             'HTML.SafeObject'=&gt;true, // To allow including youtube
<span class="ln">109</span>             'Output.FlashCompat'=&gt;true,
<span class="ln">110</span>             'Attr.EnableID'=&gt;true, // Allow to set id
</pre></div>			</td>
		</tr>
						<tr class="trace app expanded">
			<td class="number">
				#6			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/var/www/limesurvey/application/core/LSYii_Validators.php(52): <strong>LSYii_Validators</strong>-&gt;<strong>xssFilter</strong>("Jean MOULIN")				</div>

				<div class="code"><pre><span class="ln">47</span> 
<span class="ln">48</span>     protected function validateAttribute($object,$attribute)
<span class="ln">49</span>     {
<span class="ln">50</span>         if($this-&gt;xssfilter)
<span class="ln">51</span>         {
<span class="error"><span class="ln error-ln">52</span>             $object-&gt;$attribute=$this-&gt;xssFilter($object-&gt;$attribute);
</span><span class="ln">53</span>         }
<span class="ln">54</span>         if($this-&gt;isUrl)
<span class="ln">55</span>         {
<span class="ln">56</span>             if ($object-&gt;$attribute== 'http://' || $object-&gt;$attribute=='https://') {$object-&gt;$attribute="";}
<span class="ln">57</span>             $object-&gt;$attribute=html_entity_decode($object-&gt;$attribute, ENT_QUOTES, "UTF-8"); // 140219 : Why not urlencode ?
</pre></div>			</td>
		</tr>
						<tr class="trace core collapsed">
			<td class="number">
				#7			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/var/www/limesurvey/framework/validators/CValidator.php(213): <strong>LSYii_Validators</strong>-&gt;<strong>validateAttribute</strong>(Survey, "admin")				</div>

				<div class="code"><pre><span class="ln">208</span>         else
<span class="ln">209</span>             $attributes=$this-&gt;attributes;
<span class="ln">210</span>         foreach($attributes as $attribute)
<span class="ln">211</span>         {
<span class="ln">212</span>             if(!$this-&gt;skipOnError || !$object-&gt;hasErrors($attribute))
<span class="error"><span class="ln error-ln">213</span>                 $this-&gt;validateAttribute($object,$attribute);
</span><span class="ln">214</span>         }
<span class="ln">215</span>     }
<span class="ln">216</span> 
<span class="ln">217</span>     /**
<span class="ln">218</span>      * Returns the JavaScript needed for performing client-side validation.
</pre></div>			</td>
		</tr>
						<tr class="trace core collapsed">
			<td class="number">
				#8			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/var/www/limesurvey/framework/base/CModel.php(159): <strong>CValidator</strong>-&gt;<strong>validate</strong>(Survey, null)				</div>

				<div class="code"><pre><span class="ln">154</span>         if($clearErrors)
<span class="ln">155</span>             $this-&gt;clearErrors();
<span class="ln">156</span>         if($this-&gt;beforeValidate())
<span class="ln">157</span>         {
<span class="ln">158</span>             foreach($this-&gt;getValidators() as $validator)
<span class="error"><span class="ln error-ln">159</span>                 $validator-&gt;validate($this,$attributes);
</span><span class="ln">160</span>             $this-&gt;afterValidate();
<span class="ln">161</span>             return !$this-&gt;hasErrors();
<span class="ln">162</span>         }
<span class="ln">163</span>         else
<span class="ln">164</span>             return false;
</pre></div>			</td>
		</tr>
						<tr class="trace core collapsed">
			<td class="number">
				#9			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/var/www/limesurvey/framework/db/ar/CActiveRecord.php(805): <strong>CModel</strong>-&gt;<strong>validate</strong>(null)				</div>

				<div class="code"><pre><span class="ln">800</span>      * meaning all attributes that are loaded from DB will be saved.
<span class="ln">801</span>      * @return boolean whether the saving succeeds
<span class="ln">802</span>      */
<span class="ln">803</span>     public function save($runValidation=true,$attributes=null)
<span class="ln">804</span>     {
<span class="error"><span class="ln error-ln">805</span>         if(!$runValidation || $this-&gt;validate($attributes))
</span><span class="ln">806</span>             return $this-&gt;getIsNewRecord() ? $this-&gt;insert($attributes) : $this-&gt;update($attributes);
<span class="ln">807</span>         else
<span class="ln">808</span>             return false;
<span class="ln">809</span>     }
<span class="ln">810</span> 
</pre></div>			</td>
		</tr>
						<tr class="trace app expanded">
			<td class="number">
				#10			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/var/www/limesurvey/application/models/Survey.php(381): <strong>CActiveRecord</strong>-&gt;<strong>save</strong>()				</div>

				<div class="code"><pre><span class="ln">376</span>         while (!is_null($isresult));
<span class="ln">377</span> 
<span class="ln">378</span>         $survey = new self;
<span class="ln">379</span>         foreach ($aData as $k =&gt; $v)
<span class="ln">380</span>             $survey-&gt;$k = $v;
<span class="error"><span class="ln error-ln">381</span>         $sResult= $survey-&gt;save();
</span><span class="ln">382</span>         if ($sResult==false) return false;
<span class="ln">383</span>         else return $aData['sid'];
<span class="ln">384</span>     }
<span class="ln">385</span> 
<span class="ln">386</span>     /**
</pre></div>			</td>
		</tr>
						<tr class="trace app collapsed">
			<td class="number">
				#11			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/var/www/limesurvey/application/controllers/admin/surveyadmin.php(1578): <strong>Survey</strong>-&gt;<strong>insertNewSurvey</strong>(array("expires" =&gt; "", "startdate" =&gt; "", "template" =&gt; "default", "owner_id" =&gt; 58, ...))				</div>

				<div class="code"><pre><span class="ln">1573</span>             if (!is_null($iSurveyID))
<span class="ln">1574</span>             {
<span class="ln">1575</span>                 $aInsertData['wishSID'] = $iSurveyID;
<span class="ln">1576</span>             }
<span class="ln">1577</span> 
<span class="error"><span class="ln error-ln">1578</span>             $iNewSurveyid = Survey::model()-&gt;insertNewSurvey($aInsertData);
</span><span class="ln">1579</span>             if (!$iNewSurveyid)
<span class="ln">1580</span>                 die('Survey could not be created.');
<span class="ln">1581</span> 
<span class="ln">1582</span>             // Prepare locale data for surveys_language_settings table
<span class="ln">1583</span>             $sTitle = $_POST['surveyls_title'];
</pre></div>			</td>
		</tr>
						<tr class="trace core collapsed">
			<td class="number">
				#12			</td>
			<td class="content">
				<div class="trace-file">
										&nbsp;unknown(0): <strong>SurveyAdmin</strong>-&gt;<strong>insert</strong>(null)				</div>

							</td>
		</tr>
						<tr class="trace core collapsed">
			<td class="number">
				#13			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/var/www/limesurvey/framework/web/actions/CAction.php(108): <strong>ReflectionMethod</strong>-&gt;<strong>invokeArgs</strong>(SurveyAdmin, array(null))				</div>

				<div class="code"><pre><span class="ln">103</span>             elseif($param-&gt;isDefaultValueAvailable())
<span class="ln">104</span>                 $ps[]=$param-&gt;getDefaultValue();
<span class="ln">105</span>             else
<span class="ln">106</span>                 return false;
<span class="ln">107</span>         }
<span class="error"><span class="ln error-ln">108</span>         $method-&gt;invokeArgs($object,$ps);
</span><span class="ln">109</span>         return true;
<span class="ln">110</span>     }
<span class="ln">111</span> }
</pre></div>			</td>
		</tr>
						<tr class="trace app collapsed">
			<td class="number">
				#14			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/var/www/limesurvey/application/core/Survey_Common_Action.php(99): <strong>CAction</strong>-&gt;<strong>runWithParamsInternal</strong>(SurveyAdmin, ReflectionMethod, array("sa" =&gt; "insert"))				</div>

				<div class="code"><pre><span class="ln">094</span>             $oMethod = new ReflectionMethod($this, $sDefault);
<span class="ln">095</span>         }
<span class="ln">096</span> 
<span class="ln">097</span>         // We're all good to go, let's execute it
<span class="ln">098</span>         // runWithParamsInternal would automatically get the parameters of the method and populate them as required with the params
<span class="error"><span class="ln error-ln">099</span>         return parent::runWithParamsInternal($this, $oMethod, $params);
</span><span class="ln">100</span>     }
<span class="ln">101</span> 
<span class="ln">102</span>     /**
<span class="ln">103</span>     * Some functions have different parameters, which are just an alias of the
<span class="ln">104</span>     * usual parameters we're getting in the url. This function just populates
</pre></div>			</td>
		</tr>
						<tr class="trace core collapsed">
			<td class="number">
				#15			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/var/www/limesurvey/framework/web/CController.php(308): <strong>Survey_Common_Action</strong>-&gt;<strong>runWithParams</strong>(array("sa" =&gt; "insert"))				</div>

				<div class="code"><pre><span class="ln">303</span>     {
<span class="ln">304</span>         $priorAction=$this-&gt;_action;
<span class="ln">305</span>         $this-&gt;_action=$action;
<span class="ln">306</span>         if($this-&gt;beforeAction($action))
<span class="ln">307</span>         {
<span class="error"><span class="ln error-ln">308</span>             if($action-&gt;runWithParams($this-&gt;getActionParams())===false)
</span><span class="ln">309</span>                 $this-&gt;invalidActionParams($action);
<span class="ln">310</span>             else
<span class="ln">311</span>                 $this-&gt;afterAction($action);
<span class="ln">312</span>         }
<span class="ln">313</span>         $this-&gt;_action=$priorAction;
</pre></div>			</td>
		</tr>
						<tr class="trace core collapsed">
			<td class="number">
				#16			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/var/www/limesurvey/framework/web/CController.php(286): <strong>CController</strong>-&gt;<strong>runAction</strong>(SurveyAdmin)				</div>

				<div class="code"><pre><span class="ln">281</span>      * @see runAction
<span class="ln">282</span>      */
<span class="ln">283</span>     public function runActionWithFilters($action,$filters)
<span class="ln">284</span>     {
<span class="ln">285</span>         if(empty($filters))
<span class="error"><span class="ln error-ln">286</span>             $this-&gt;runAction($action);
</span><span class="ln">287</span>         else
<span class="ln">288</span>         {
<span class="ln">289</span>             $priorAction=$this-&gt;_action;
<span class="ln">290</span>             $this-&gt;_action=$action;
<span class="ln">291</span>             CFilterChain::create($this,$action,$filters)-&gt;run();
</pre></div>			</td>
		</tr>
						<tr class="trace core collapsed">
			<td class="number">
				#17			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/var/www/limesurvey/framework/web/CController.php(265): <strong>CController</strong>-&gt;<strong>runActionWithFilters</strong>(SurveyAdmin, array())				</div>

				<div class="code"><pre><span class="ln">260</span>         {
<span class="ln">261</span>             if(($parent=$this-&gt;getModule())===null)
<span class="ln">262</span>                 $parent=Yii::app();
<span class="ln">263</span>             if($parent-&gt;beforeControllerAction($this,$action))
<span class="ln">264</span>             {
<span class="error"><span class="ln error-ln">265</span>                 $this-&gt;runActionWithFilters($action,$this-&gt;filters());
</span><span class="ln">266</span>                 $parent-&gt;afterControllerAction($this,$action);
<span class="ln">267</span>             }
<span class="ln">268</span>         }
<span class="ln">269</span>         else
<span class="ln">270</span>             $this-&gt;missingAction($actionID);
</pre></div>			</td>
		</tr>
						<tr class="trace app collapsed">
			<td class="number">
				#18			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/var/www/limesurvey/application/controllers/AdminController.php(169): <strong>CController</strong>-&gt;<strong>run</strong>("survey")				</div>

				<div class="code"><pre><span class="ln">164</span>                     $this-&gt;redirect(array('/admin/authentication/sa/login'));
<span class="ln">165</span>                 }
<span class="ln">166</span>                 
<span class="ln">167</span>             }
<span class="ln">168</span> 
<span class="error"><span class="ln error-ln">169</span>             return parent::run($action);
</span><span class="ln">170</span>     }
<span class="ln">171</span> 
<span class="ln">172</span>     /**
<span class="ln">173</span>     * Routes all the actions to their respective places
<span class="ln">174</span>     *
</pre></div>			</td>
		</tr>
						<tr class="trace core collapsed">
			<td class="number">
				#19			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/var/www/limesurvey/framework/web/CWebApplication.php(282): <strong>AdminController</strong>-&gt;<strong>run</strong>("survey")				</div>

				<div class="code"><pre><span class="ln">277</span>         {
<span class="ln">278</span>             list($controller,$actionID)=$ca;
<span class="ln">279</span>             $oldController=$this-&gt;_controller;
<span class="ln">280</span>             $this-&gt;_controller=$controller;
<span class="ln">281</span>             $controller-&gt;init();
<span class="error"><span class="ln error-ln">282</span>             $controller-&gt;run($actionID);
</span><span class="ln">283</span>             $this-&gt;_controller=$oldController;
<span class="ln">284</span>         }
<span class="ln">285</span>         else
<span class="ln">286</span>             throw new CHttpException(404,Yii::t('yii','Unable to resolve the request "{route}".',
<span class="ln">287</span>                 array('{route}'=&gt;$route===''?$this-&gt;defaultController:$route)));
</pre></div>			</td>
		</tr>
						<tr class="trace core collapsed">
			<td class="number">
				#20			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/var/www/limesurvey/framework/web/CWebApplication.php(141): <strong>CWebApplication</strong>-&gt;<strong>runController</strong>("admin/survey/sa/insert")				</div>

				<div class="code"><pre><span class="ln">136</span>             foreach(array_splice($this-&gt;catchAllRequest,1) as $name=&gt;$value)
<span class="ln">137</span>                 $_GET[$name]=$value;
<span class="ln">138</span>         }
<span class="ln">139</span>         else
<span class="ln">140</span>             $route=$this-&gt;getUrlManager()-&gt;parseUrl($this-&gt;getRequest());
<span class="error"><span class="ln error-ln">141</span>         $this-&gt;runController($route);
</span><span class="ln">142</span>     }
<span class="ln">143</span> 
<span class="ln">144</span>     /**
<span class="ln">145</span>      * Registers the core application components.
<span class="ln">146</span>      * This method overrides the parent implementation by registering additional core components.
</pre></div>			</td>
		</tr>
						<tr class="trace core collapsed">
			<td class="number">
				#21			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/var/www/limesurvey/framework/base/CApplication.php(180): <strong>CWebApplication</strong>-&gt;<strong>processRequest</strong>()				</div>

				<div class="code"><pre><span class="ln">175</span>     public function run()
<span class="ln">176</span>     {
<span class="ln">177</span>         if($this-&gt;hasEventHandler('onBeginRequest'))
<span class="ln">178</span>             $this-&gt;onBeginRequest(new CEvent($this));
<span class="ln">179</span>         register_shutdown_function(array($this,'end'),0,false);
<span class="error"><span class="ln error-ln">180</span>         $this-&gt;processRequest();
</span><span class="ln">181</span>         if($this-&gt;hasEventHandler('onEndRequest'))
<span class="ln">182</span>             $this-&gt;onEndRequest(new CEvent($this));
<span class="ln">183</span>     }
<span class="ln">184</span> 
<span class="ln">185</span>     /**
</pre></div>			</td>
		</tr>
						<tr class="trace app collapsed">
			<td class="number">
				#22			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/var/www/limesurvey/index.php(200): <strong>CApplication</strong>-&gt;<strong>run</strong>()				</div>

				<div class="code"><pre><span class="ln">195</span>         die (sprintf('%s should be writable by the webserver (755 or 775).', $runtimePath));
<span class="ln">196</span>     }
<span class="ln">197</span> }
<span class="ln">198</span> 
<span class="ln">199</span> 
<span class="error"><span class="ln error-ln">200</span> Yii::createApplication('LSYii_Application', $config)-&gt;run();
</span><span class="ln">201</span> 
<span class="ln">202</span> /* End of file index.php */
<span class="ln">203</span> /* Location: ./index.php */
</pre></div>			</td>
		</tr>
				</tbody></table>
	</div>

	<div class="version">
		2014-05-02 13:52:14 Apache/2.2.22 (Ubuntu) <a href="http://www.yiiframework.com/">Yii Framework</a>/1.1.14	</div>
</div>

<script type="text/javascript">
/*<![CDATA[*/
var traceReg = new RegExp("(^|\\s)trace-file(\\s|$)");
var collapsedReg = new RegExp("(^|\\s)collapsed(\\s|$)");

var e = document.getElementsByTagName("div");
for(var j=0,len=e.length;j<len;j++){
	if(traceReg.test(e[j].className)){
		e[j].onclick = function(){
			var trace = this.parentNode.parentNode;
			if(collapsedReg.test(trace.className))
				trace.className = trace.className.replace("collapsed", "expanded");
			else
				trace.className = trace.className.replace("expanded", "collapsed");
		}
	}
}
/*]]>*/
</script>



<script type="text/javascript">
/*<![CDATA[*/
if(typeof(console)=='object')
{
	console.group("Application Log");
	console.log("[13:52:14.309][trace][system.db.ar.CActiveRecord] Plugin.findAllByAttributes()");
	console.log("[13:52:14.311][trace][system.db.CDbConnection] Opening DB connection");
	console.log("[13:52:14.323][trace][system.db.CDbCommand] Querying SQL: SELECT * FROM `lime_plugins` `t` WHERE `t`.`active`=:yp0. Bound with :yp0=1");
	console.log("[13:52:14.337][trace][system.db.ar.CActiveRecord] SettingGlobal.findAll()");
	console.log("[13:52:14.337][trace][system.db.CDbCommand] Querying SQL: SELECT * FROM `lime_settings_global` `t`");
	console.log("[13:52:14.451][trace][system.db.ar.CActiveRecord] Permission.findByAttributes()");
	console.log("[13:52:14.452][trace][system.db.CDbCommand] Querying SQL: SELECT * FROM `lime_permissions` `t` WHERE `t`.`entity_id`=:yp0 AND `t`.`entity`=:yp1 AND `t`.`uid`=:yp2 AND `t`.`permission`=:yp3 LIMIT 1. Bound with :yp0=0, :yp1=\'global\', :yp2=58, :yp3=\'superadmin\'");
	console.log("[13:52:14.452][trace][system.db.ar.CActiveRecord] Permission.findByAttributes()");
	console.log("[13:52:14.452][trace][system.db.CDbCommand] Querying SQL: SELECT * FROM `lime_permissions` `t` WHERE `t`.`entity_id`=:yp0 AND `t`.`uid`=:yp1 AND `t`.`entity`=:yp2 AND `t`.`permission`=:yp3 LIMIT 1. Bound with :yp0=0, :yp1=58, :yp2=\'global\', :yp3=\'surveys\'");
	console.log("[13:52:14.453][trace][system.db.ar.CActiveRecord] Permission.findByAttributes()");
	console.log("[13:52:14.453][trace][system.db.CDbCommand] Querying SQL: SELECT * FROM `lime_permissions` `t` WHERE `t`.`entity_id`=:yp0 AND `t`.`uid`=:yp1 AND `t`.`entity`=:yp2 AND `t`.`permission`=:yp3 LIMIT 1. Bound with :yp0=0, :yp1=58, :yp2=\'global\', :yp3=\'templates\'");
	console.log("[13:52:14.454][trace][system.db.ar.CActiveRecord] Permission.findByAttributes()");
	console.log("[13:52:14.454][trace][system.db.CDbCommand] Querying SQL: SELECT * FROM `lime_permissions` `t` WHERE `t`.`entity_id`=:yp0 AND `t`.`uid`=:yp1 AND `t`.`entity`=:yp2 AND `t`.`permission`=:yp3 LIMIT 1. Bound with :yp0=0, :yp1=\'58\', :yp2=\'template\', :yp3=\'basic\'");
	console.log("[13:52:14.470][trace][system.db.ar.CActiveRecord] Survey.findByPk()");
	console.log("[13:52:14.470][trace][system.db.CDbCommand] Querying SQL: SELECT * FROM `lime_surveys` `t` WHERE `t`.`sid`=149151 LIMIT 1");
	console.groupEnd();
}
/*]]>*/
</script></body></html>
PHP warning.htm (34,747 bytes)   
Bug heat4
Complete LimeSurvey version number (& build)2.05+ Build 140422
I will donate to the project if issue is resolvedNo
Browserfirefox
Database type & versionMySQL: 5.5.31
Server OS (if known)Ubuntu 12.04.2 LTS (GNU/Linux 3.5.0-23-generic x86_64)
Webserver software & version (if known)Apache/2.2.22
PHP VersionPHP 5.3

Users monitoring this issue

There are no users monitoring this issue.

Activities

c_schmitz

c_schmitz

2014-05-02 09:55

administrator   ~29921

What permissions does the user have?

zewood

zewood

2014-05-02 10:00

reporter   ~29922

Helo
permissions are in the joined file.

c_schmitz

c_schmitz

2014-05-02 12:48

administrator   ~29933

I am sorry but I cannot reproduce this. Can you activate debug mode in /Application/config/config.php and attach the full debug output (when the error happens) as HTML file?

Thank you

zewood

zewood

2014-05-02 13:58

reporter   ~29941

the htm error page in the joined file

c_schmitz

c_schmitz

2014-05-02 14:04

administrator   ~29942

Fix committed to master branch: http://bugs.limesurvey.org/plugin.php?page=Source/view&amp;id=14199

zewood

zewood

2014-05-02 14:52

reporter   ~29943

Last edited: 2014-05-02 14:52

it's ok now
a great thanks

c_schmitz

c_schmitz

2014-05-02 15:10

administrator   ~29944

2.05+ Build 140502 released.

Related Changesets

LimeSurvey: master fccdb298

2014-05-02 12:04:23

c_schmitz

Details Diff
Fixed issue 09007: Crash when an user wants to create a new survey Affected Issues
09007
mod - application/core/LSYii_Validators.php Diff File

Issue History

Date Modified Username Field Change
2014-04-30 16:13 zewood New Issue
2014-04-30 16:13 zewood Status new => assigned
2014-04-30 16:13 zewood Assigned To => c_schmitz
2014-05-02 09:55 c_schmitz Note Added: 29921
2014-05-02 09:55 c_schmitz Status assigned => feedback
2014-05-02 09:59 zewood File Added: Capture.JPG
2014-05-02 10:00 zewood Note Added: 29922
2014-05-02 10:00 zewood Status feedback => assigned
2014-05-02 12:48 c_schmitz Note Added: 29933
2014-05-02 12:48 c_schmitz Status assigned => feedback
2014-05-02 13:58 zewood Note Added: 29941
2014-05-02 13:58 zewood Status feedback => assigned
2014-05-02 13:58 zewood File Added: PHP warning.htm
2014-05-02 14:04 c_schmitz Changeset attached => LimeSurvey master fccdb298
2014-05-02 14:04 c_schmitz Note Added: 29942
2014-05-02 14:04 c_schmitz Resolution open => fixed
2014-05-02 14:04 c_schmitz Status assigned => resolved
2014-05-02 14:04 c_schmitz Fixed in Version => 2.05+
2014-05-02 14:52 zewood Note Added: 29943
2014-05-02 14:52 zewood Note Edited: 29943
2014-05-02 15:10 c_schmitz Note Added: 29944
2014-05-02 15:10 c_schmitz Status resolved => closed