Skip to content

Commit 8393ccd

Browse files
Merge pull request #3465 in SW/shopware from sw-14719/5.1/load-files to 5.1
* commit 'd73e9031a5b2ab6e918eb86d1e2b2e873cd3558d': SW-14719 - Improve input validation in ScriptRenderer
2 parents 888c154 + d73e903 commit 8393ccd

File tree

2 files changed

+31
-14
lines changed

2 files changed

+31
-14
lines changed

engine/Library/Enlight/Controller/Plugins/ScriptRenderer/Bootstrap.php

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -170,28 +170,35 @@ public function getTemplateName()
170170
}
171171

172172
$templateNames = array();
173-
174173
foreach ($fileNames as $fileName) {
174+
// Remove unwanted characters
175+
$fileName = preg_replace('/[^a-z0-9\/_-]/i', '', $fileName);
176+
177+
// Replace multiple forward slashes
178+
$fileName = preg_replace('#/+#', '/', $fileName);
179+
180+
// Remove leading and trailing forward slash
181+
$fileName = trim($fileName, '/');
182+
175183
// if string starts with "m/" replace with "model/"
176184
$fileName = preg_replace('/^m\//', 'model/', $fileName);
177185
$fileName = preg_replace('/^c\//', 'controller/', $fileName);
178186
$fileName = preg_replace('/^v\//', 'view/', $fileName);
179187

180-
$fileName = ltrim(dirname($fileName) . '/' . basename($fileName, '.js'), '/.');
181-
182188
if (empty($fileName)) {
183189
continue;
184190
}
185191

186-
$templateNames[] = $inflector->filter(array(
192+
$fileName = $inflector->filter(array(
187193
'module' => $moduleName,
188194
'controller' => $controllerName,
189-
'file' => $fileName)
190-
);
195+
'file' => $fileName
196+
));
197+
198+
$templateNames[] = $fileName;
191199
}
192200

193201
$count = count($templateNames);
194-
195202
if ($count === 0) {
196203
return null;
197204
} elseif ($count === 1) {

engine/Shopware/Controllers/Backend/ExtJs.php

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -208,26 +208,36 @@ public function extendsAction()
208208
$this->View()->Engine()->setCompileId($this->View()->Engine()->getCompileId() . '_' . $this->Request()->getControllerName());
209209

210210
foreach ($fileNames as $fileName) {
211+
// Remove unwanted characters
212+
$fileName = preg_replace('/[^a-z0-9\/_-]/i', '', $fileName);
213+
214+
// Replace multiple forward slashes
215+
$fileName = preg_replace('#/+#', '/', $fileName);
216+
217+
// Remove leading and trailing forward slash
218+
$fileName = trim($fileName, '/');
219+
211220
// if string starts with "m/" replace with "model/"
212221
$fileName = preg_replace('/^m\//', 'model/', $fileName);
213222
$fileName = preg_replace('/^c\//', 'controller/', $fileName);
214223
$fileName = preg_replace('/^v\//', 'view/', $fileName);
215224

216-
$fileName = ltrim(dirname($fileName) . '/' . basename($fileName, '.js'), '/.');
217225
if (empty($fileName)) {
218226
continue;
219227
}
228+
220229
$templateBase = $inflector->filter(array(
221-
'module' => $moduleName,
230+
'module' => $moduleName,
222231
'controller' => $controllerName,
223-
'file' => $fileName)
224-
);
232+
'file' => $fileName
233+
));
225234

226235
$templateExtend = $inflector->filter(array(
227-
'module' => $moduleName,
236+
'module' => $moduleName,
228237
'controller' => $this->Request()->getControllerName(),
229-
'file' => $fileName)
230-
);
238+
'file' => $fileName
239+
));
240+
231241
if ($this->View()->templateExists($templateBase)) {
232242
$template .= '{include file="' . $templateBase. '"}' . "\n";
233243
}

0 commit comments

Comments
 (0)