View Issue Details

This bug affects 1 person(s).
 4
IDProjectCategoryView StatusLast Update
20032Bug reportsSurvey participants (Tokens)public2025-03-26 08:20
Reportermfavetti Assigned ToDenisChenu  
PrioritynoneSeverityminor 
Status assignedResolutionopen 
Product Version6.6.x 
Summary20032: PHP Error When Importing Participants From CSV
Description

Just realized this is only with debug>0, so very low priority.

When importing participants via CSV, if any rows are lacking a token (e.g. you're importing a bunch of emails and are going to use the "Generate access codes" feature to give them tokens) you will get a PHP error and the import will fail.

php error (see attachments for full stack trace):
preg_replace(): Passing null to parameter #3 ($subject) of type array|string is deprecated
/srv/www/limesurvey6/application/models/Token.php(315)

affected php versions:
7.4 - DID NOT TEST
8.0 - OKAY
8.1 - ERROR
8.2 - ERROR
8.3 - ERROR
8.4 - DID NOT TEST

NOTE: Mantis "Product Version" does not include 6.10.x

Steps To Reproduce

Steps to reproduce

  1. Create a survey
  2. Switch to closed access mode
  3. Import participants from CSV (you can use attached csv for testing)

Expected result

Participants are imported

Actual result

PHP error, participants are not imported

TagsNo tags attached.
Attached Files
participants.csv (166 bytes)   
tid,firstname,lastname,email,emailstatus,token,language,validfrom,validuntil,invited,reminded,remindercount,completed,usesleft
,,,test@example.com,OK,,en,,,N,N,0,N,1
participants.csv (166 bytes)   
PHP error.html (24,655 bytes)   
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!-- saved from url=(0057)http://limesurvey6/admin/tokens/sa/import/surveyid/215234 -->
<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 error</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 error</h1>

	<p class="message">
		preg_replace(): Passing null to parameter #3 ($subject) of type array|string is deprecated	</p>

	<div class="source">
		<p class="file">/srv/www/limesurvey6/application/models/Token.php(315)</p>
		<div class="code"><pre><span class="ln">303</span>         return $token;
<span class="ln">304</span>     }
<span class="ln">305</span> 
<span class="ln">306</span>     /**
<span class="ln">307</span>      * Sanitize token show to the user (replace sanitize_helper sanitize_token)
<span class="ln">308</span>      * @param string $token to sanitize
<span class="ln">309</span>      * @return string sanitized token
<span class="ln">310</span>      */
<span class="ln">311</span>     public static function sanitizeToken($token)
<span class="ln">312</span>     {
<span class="ln">313</span>         // According to Yii doc : http://www.yiiframework.com/doc/api/1.1/CSecurityManager#generateRandomString-detail
<span class="ln">314</span>         $pattern = Yii::app()-&gt;getConfig("allowedcharacters_pattern_token");
<span class="error"><span class="ln error-ln">315</span>         return preg_replace($pattern, '', $token);
</span><span class="ln">316</span>     }
<span class="ln">317</span> 
<span class="ln">318</span>     /**
<span class="ln">319</span>      * Sanitize string for any attribute
<span class="ln">320</span>      * @param string $attribute to sanitize
<span class="ln">321</span>      * @return string sanitized attribute
<span class="ln">322</span>      */
<span class="ln">323</span>     public static function sanitizeAttribute($attribute)
<span class="ln">324</span>     {
<span class="ln">325</span>         // TODO: Use HTML Purifier?
<span class="ln">326</span>         return filter_var($attribute, @FILTER_SANITIZE_STRING, FILTER_FLAG_NO_ENCODE_QUOTES);
<span class="ln">327</span>     }
</pre></div>	</div>

	<div class="traces">
		<h2>Stack Trace</h2>
				<table style="width:100%;">
						<tbody><tr class="trace app expanded">
			<td class="number">
				#0			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/srv/www/limesurvey6/application/models/Token.php(315): <strong>preg_replace</strong>("/[^0-9a-zA-Z_\-~]/", "", null)				</div>

				<div class="code"><pre><span class="ln">310</span>      */
<span class="ln">311</span>     public static function sanitizeToken($token)
<span class="ln">312</span>     {
<span class="ln">313</span>         // According to Yii doc : http://www.yiiframework.com/doc/api/1.1/CSecurityManager#generateRandomString-detail
<span class="ln">314</span>         $pattern = Yii::app()-&gt;getConfig("allowedcharacters_pattern_token");
<span class="error"><span class="ln error-ln">315</span>         return preg_replace($pattern, '', $token);
</span><span class="ln">316</span>     }
<span class="ln">317</span> 
<span class="ln">318</span>     /**
<span class="ln">319</span>      * Sanitize string for any attribute
<span class="ln">320</span>      * @param string $attribute to sanitize
</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;/srv/www/limesurvey6/vendor/yiisoft/yii/framework/validators/CFilterValidator.php(47): <strong>Token</strong>::<strong>sanitizeToken</strong>(null)				</div>

				<div class="code"><pre><span class="ln">42</span>      */
<span class="ln">43</span>     protected function validateAttribute($object,$attribute)
<span class="ln">44</span>     {
<span class="ln">45</span>         if($this-&gt;filter===null || !is_callable($this-&gt;filter))
<span class="ln">46</span>             throw new CException(Yii::t('yii','The "filter" property must be specified with a valid callback.'));
<span class="error"><span class="ln error-ln">47</span>         $object-&gt;$attribute=call_user_func_array($this-&gt;filter,array($object-&gt;$attribute));
</span><span class="ln">48</span>     }
<span class="ln">49</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;/srv/www/limesurvey6/vendor/yiisoft/yii/framework/validators/CValidator.php(201): <strong>CFilterValidator</strong>-&gt;<strong>validateAttribute</strong>(Token_215234, "token")				</div>

				<div class="code"><pre><span class="ln">196</span>         else
<span class="ln">197</span>             $attributes=$this-&gt;attributes;
<span class="ln">198</span>         foreach($attributes as $attribute)
<span class="ln">199</span>         {
<span class="ln">200</span>             if(!$this-&gt;skipOnError || !$object-&gt;hasErrors($attribute))
<span class="error"><span class="ln error-ln">201</span>                 $this-&gt;validateAttribute($object,$attribute);
</span><span class="ln">202</span>         }
<span class="ln">203</span>     }
<span class="ln">204</span> 
<span class="ln">205</span>     /**
<span class="ln">206</span>      * Returns the JavaScript needed for performing client-side validation.
</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;/srv/www/limesurvey6/vendor/yiisoft/yii/framework/base/CModel.php(159): <strong>CValidator</strong>-&gt;<strong>validate</strong>(Token_215234, array("token"))				</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 app expanded">
			<td class="number">
				#4			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/srv/www/limesurvey6/application/models/LSActiveRecord.php(454): <strong>CModel</strong>-&gt;<strong>validate</strong>()				</div>

				<div class="code"><pre><span class="ln">449</span>      */
<span class="ln">450</span>     public function encryptSave($runValidation = false)
<span class="ln">451</span>     {
<span class="ln">452</span>         // run validation on attribute values before encryption take place, it is impossible to validate encrypted values
<span class="ln">453</span>         if ($runValidation) {
<span class="error"><span class="ln error-ln">454</span>             if (!$this-&gt;validate()) {
</span><span class="ln">455</span>                 return false;
<span class="ln">456</span>             }
<span class="ln">457</span>         }
<span class="ln">458</span> 
<span class="ln">459</span>         // encrypt attributes
</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;/srv/www/limesurvey6/application/controllers/admin/Tokens.php(2435): <strong>LSActiveRecord</strong>-&gt;<strong>encryptSave</strong>(true)				</div>

				<div class="code"><pre><span class="ln">2430</span>                                 $oToken-&gt;scenario = 'allowinvalidemail';
<span class="ln">2431</span>                             }
<span class="ln">2432</span>                             foreach ($aWriteArray as $key =&gt; $value) {
<span class="ln">2433</span>                                 $oToken-&gt;$key = $value;
<span class="ln">2434</span>                             }
<span class="error"><span class="ln error-ln">2435</span>                             if (!$oToken-&gt;encryptSave(true)) {
</span><span class="ln">2436</span>                                 $aModelErrorList[] = array('line' =&gt; $iRecordCount, 'errors' =&gt; CHtml::errorSummary($oToken, '', '', ['class' =&gt; 'text-start']));
<span class="ln">2437</span>                             } else {
<span class="ln">2438</span>                                 $bImportDone = true;
<span class="ln">2439</span>                             }
<span class="ln">2440</span>                         }
</pre></div>			</td>
		</tr>
						<tr class="trace core collapsed">
			<td class="number">
				#6			</td>
			<td class="content">
				<div class="trace-file">
										&nbsp;unknown(0): <strong>Tokens</strong>-&gt;<strong>import</strong>(215234)				</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;/srv/www/limesurvey6/vendor/yiisoft/yii/framework/web/actions/CAction.php(114): <strong>ReflectionMethod</strong>-&gt;<strong>invokeArgs</strong>(Tokens, array(215234))				</div>

				<div class="code"><pre><span class="ln">109</span>             elseif($param-&gt;isDefaultValueAvailable())
<span class="ln">110</span>                 $ps[]=$param-&gt;getDefaultValue();
<span class="ln">111</span>             else
<span class="ln">112</span>                 return false;
<span class="ln">113</span>         }
<span class="error"><span class="ln error-ln">114</span>         $method-&gt;invokeArgs($object,$ps);
</span><span class="ln">115</span>         return true;
<span class="ln">116</span>     }
<span class="ln">117</span> }
</pre></div>			</td>
		</tr>
						<tr class="trace app collapsed">
			<td class="number">
				#8			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/srv/www/limesurvey6/application/core/SurveyCommonAction.php(83): <strong>CAction</strong>-&gt;<strong>runWithParamsInternal</strong>(Tokens, ReflectionMethod, array("surveyid" =&gt; 215234, "sa" =&gt; "import", "iSurveyId" =&gt; 215234, "iSurveyID" =&gt; 215234, ...))				</div>

				<div class="code"><pre><span class="ln">78</span>             $oMethod = new ReflectionMethod($this, $sDefault);
<span class="ln">79</span>         }
<span class="ln">80</span> 
<span class="ln">81</span>         // We're all good to go, let's execute it
<span class="ln">82</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">83</span>         return parent::runWithParamsInternal($this, $oMethod, $params);
</span><span class="ln">84</span>     }
<span class="ln">85</span> 
<span class="ln">86</span>     /**
<span class="ln">87</span>      * Some functions have different parameters, which are just an alias of the
<span class="ln">88</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">
				#9			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/srv/www/limesurvey6/vendor/yiisoft/yii/framework/web/CController.php(308): <strong>SurveyCommonAction</strong>-&gt;<strong>runWithParams</strong>(array("surveyid" =&gt; 215234, "sa" =&gt; "import", "iSurveyId" =&gt; 215234, "iSurveyID" =&gt; 215234, ...))				</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">
				#10			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/srv/www/limesurvey6/vendor/yiisoft/yii/framework/web/CController.php(286): <strong>CController</strong>-&gt;<strong>runAction</strong>(Tokens)				</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">
				#11			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/srv/www/limesurvey6/vendor/yiisoft/yii/framework/web/CController.php(265): <strong>CController</strong>-&gt;<strong>runActionWithFilters</strong>(Tokens, 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">
				#12			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/srv/www/limesurvey6/application/controllers/AdminController.php(204): <strong>CController</strong>-&gt;<strong>run</strong>("tokens")				</div>

				<div class="code"><pre><span class="ln">199</span>         $this-&gt;runModuleController($action);
<span class="ln">200</span>         // this will redirect the default action to the new controller previously "admin/index" or "admin" to "dashboard/view"
<span class="ln">201</span>         if (empty($action) || $action === 'index') {
<span class="ln">202</span>             $this-&gt;redirect($this-&gt;createUrl('dashboard/view'));
<span class="ln">203</span>         }
<span class="error"><span class="ln error-ln">204</span>         return parent::run($action);
</span><span class="ln">205</span>     }
<span class="ln">206</span> 
<span class="ln">207</span>     /**
<span class="ln">208</span>      * Starting with LS4, 3rd party developer can extends any of the LimeSurve controllers.
<span class="ln">209</span>      *
</pre></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;/srv/www/limesurvey6/vendor/yiisoft/yii/framework/web/CWebApplication.php(282): <strong>AdminController</strong>-&gt;<strong>run</strong>("tokens")				</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">
				#14			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/srv/www/limesurvey6/vendor/yiisoft/yii/framework/web/CWebApplication.php(141): <strong>CWebApplication</strong>-&gt;<strong>runController</strong>("admin/tokens/sa/import")				</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">
				#15			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/srv/www/limesurvey6/vendor/yiisoft/yii/framework/base/CApplication.php(185): <strong>CWebApplication</strong>-&gt;<strong>processRequest</strong>()				</div>

				<div class="code"><pre><span class="ln">180</span>     public function run()
<span class="ln">181</span>     {
<span class="ln">182</span>         if($this-&gt;hasEventHandler('onBeginRequest'))
<span class="ln">183</span>             $this-&gt;onBeginRequest(new CEvent($this));
<span class="ln">184</span>         register_shutdown_function(array($this,'end'),0,false);
<span class="error"><span class="ln error-ln">185</span>         $this-&gt;processRequest();
</span><span class="ln">186</span>         if($this-&gt;hasEventHandler('onEndRequest'))
<span class="ln">187</span>             $this-&gt;onEndRequest(new CEvent($this));
<span class="ln">188</span>     }
<span class="ln">189</span> 
<span class="ln">190</span>     /**
</pre></div>			</td>
		</tr>
						<tr class="trace app collapsed">
			<td class="number">
				#16			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/srv/www/limesurvey6/index.php(161): <strong>CApplication</strong>-&gt;<strong>run</strong>()				</div>

				<div class="code"><pre><span class="ln">156</span> require_once APPPATH . 'core/LSYii_Application' . EXT;
<span class="ln">157</span> 
<span class="ln">158</span> $config = require_once(APPPATH . 'config/internal' . EXT);
<span class="ln">159</span> 
<span class="ln">160</span> Yii::$enableIncludePath = false;
<span class="error"><span class="ln error-ln">161</span> Yii::createApplication('LSYii_Application', $config)-&gt;run();
</span><span class="ln">162</span> 
<span class="ln">163</span> /* End of file index.php */
<span class="ln">164</span> /* Location: ./index.php */
</pre></div>			</td>
		</tr>
				</tbody></table>
	</div>

	<div class="version">
		2025-03-21 16:58:20 nginx/1.24.0 <a href="https://www.yiiframework.com/">Yii Framework</a>/1.1.30	</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>



</body></html>
PHP error.html (24,655 bytes)   
Bug heat4
Complete LimeSurvey version number (& build)6.12.0+250317 (Note: this is actually 6.12.1, but the application's version number is incorrect, the build number is right)
I will donate to the project if issue is resolvedNo
Browserchrome 134.0.6998.117
Database type & versionmariadb 10.11
Server OS (if known)mint 22.1
Webserver software & version (if known)nginx 1.24.0
PHP VersionSEE ISSUE DESCRIPTION

Users monitoring this issue

There are no users monitoring this issue.

Activities

DenisChenu

DenisChenu

2025-03-25 11:12

developer   ~82318

Only if there are a token column on CSV right ?

mfavetti

mfavetti

2025-03-25 21:09

developer   ~82323

Just checked, a CSV without a token column produces the same PHP error

mfavetti

mfavetti

2025-03-25 21:10

developer   ~82324

participants (no token).csv (197 bytes)   
"tid","firstname","lastname","email","emailstatus","language","validfrom","validuntil","invited","reminded","remindercount","completed","usesleft"
,,,"test@example.com","OK","en",,,"N","N",0,"N",1
participants (no token).csv (197 bytes)   
DenisChenu

DenisChenu

2025-03-26 08:20

developer   ~82325

Just checked, a CSV without a token column produces the same PHP error

OK :) thank you :)

Issue History

Date Modified Username Field Change
2025-03-22 01:02 mfavetti New Issue
2025-03-22 01:02 mfavetti File Added: participants.csv
2025-03-22 01:02 mfavetti File Added: PHP error.html
2025-03-22 01:11 mfavetti Severity block => minor
2025-03-22 01:11 mfavetti Description Updated
2025-03-25 11:12 DenisChenu Note Added: 82318
2025-03-25 11:12 DenisChenu Bug heat 0 => 2
2025-03-25 11:12 DenisChenu Assigned To => DenisChenu
2025-03-25 11:12 DenisChenu Status new => assigned
2025-03-25 21:09 mfavetti Note Added: 82323
2025-03-25 21:09 mfavetti Bug heat 2 => 4
2025-03-25 21:10 mfavetti Note Added: 82324
2025-03-25 21:10 mfavetti File Added: participants (no token).csv
2025-03-26 08:20 DenisChenu Note Added: 82325