Skip to content

Commit 06d7f1a

Browse files
fix(SFT-2109): resolved a potential security issue with submission titles (#2002)
1 parent 8955833 commit 06d7f1a

File tree

8 files changed

+41
-18
lines changed

8 files changed

+41
-18
lines changed

packages/plugin/src/Freeform.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@
105105
use Solspace\Freeform\Twig\Filters\ImplementsClassFilter;
106106
use Solspace\Freeform\Variables\FreeformBannersVariable;
107107
use Solspace\Freeform\Variables\FreeformServicesVariable;
108+
use Solspace\Freeform\Variables\FreeformSubmissionsVariable;
108109
use Solspace\Freeform\Variables\FreeformVariable;
109110
use Symfony\Component\Serializer\Serializer;
110111
use yii\base\Event;
@@ -481,6 +482,12 @@ function (Event $event) {
481482
$event->sender->set('freeform', FreeformVariable::class);
482483
$event->sender->set('freeformServices', FreeformServicesVariable::class);
483484
$event->sender->set('freeformBanners', FreeformBannersVariable::class);
485+
486+
if ($event->sender instanceof CraftVariable) {
487+
if ($event->sender->app->request->isCpRequest) {
488+
$event->sender->set('freeformSubmissions', FreeformSubmissionsVariable::class);
489+
}
490+
}
484491
}
485492
);
486493

packages/plugin/src/Services/SubmissionsService.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -386,7 +386,6 @@ public function renderSubmissionField(
386386
[
387387
'field' => $field,
388388
'submission' => $submission,
389-
'fieldRenderer' => [$this, 'renderSubmissionField'],
390389
]
391390
);
392391

packages/plugin/src/Twig/Filters/FreeformTwigFilters.php

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ public function getFilters(): array
1111
{
1212
return [
1313
new TwigFilter('truncater', [$this, 'truncateFilter']),
14-
new TwigFilter('call', [$this, 'callUserFunction']),
1514
new TwigFilter('freeformRegexReplace', [$this, 'regexReplace']),
1615
];
1716
}
@@ -25,15 +24,6 @@ public function truncateFilter($input, $length = 50, $ellipsis = '...'): string
2524
return substr($input, 0, $length - \strlen($ellipsis)).'...';
2625
}
2726

28-
public function callUserFunction(callable $callable, ...$arguments): mixed
29-
{
30-
if (!\is_callable($callable)) {
31-
throw new \Exception('An un-callable function was passed to the "call" filter');
32-
}
33-
34-
return \call_user_func($callable, ...$arguments);
35-
}
36-
3727
public function regexReplace($input, $pattern, $replacement = ''): string
3828
{
3929
return preg_replace($pattern, $replacement, $input);
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<?php
2+
3+
/**
4+
* Freeform for Craft CMS.
5+
*
6+
* @author Solspace, Inc.
7+
* @copyright Copyright (c) 2008-2025, Solspace, Inc.
8+
*
9+
* @see https://docs.solspace.com/craft/freeform
10+
*
11+
* @license https://docs.solspace.com/license-agreement
12+
*/
13+
14+
namespace Solspace\Freeform\Variables;
15+
16+
use Solspace\Freeform\Elements\Submission;
17+
use Solspace\Freeform\Fields\FieldInterface;
18+
use Solspace\Freeform\Freeform;
19+
use Twig\Markup;
20+
21+
class FreeformSubmissionsVariable
22+
{
23+
public function renderSubmissionField(FieldInterface $field, Submission $submission): Markup
24+
{
25+
return Freeform::getInstance()
26+
->submissions
27+
->renderSubmissionField($field, $submission)
28+
;
29+
}
30+
}

packages/plugin/src/controllers/SubmissionsController.php

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -148,8 +148,6 @@ public function actionEdit(int $id): Response
148148
$statuses[$statusId] = $status;
149149
}
150150

151-
$fieldRenderer = [$submissionsService, 'renderSubmissionField'];
152-
153151
$tabs = array_reduce(
154152
array_map(
155153
fn (Page $page) => [
@@ -176,7 +174,6 @@ function ($result, $item) {
176174
'statuses' => $statuses,
177175
'note' => $noteRecord?->note,
178176
'continueEditingUrl' => 'freeform/submissions/{id}',
179-
'fieldRenderer' => $fieldRenderer,
180177
'tabs' => $tabs,
181178
'sidebarHtml' => $submission->getSidebarHtml(true),
182179
'isCraft5' => version_compare(\Craft::$app->version, '5.0', '>='),

packages/plugin/src/templates/submissions/edit.twig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@
6969
{% for page in layout.pages %}
7070
<div class="field tab-content{% if not loop.first %} hidden{% endif %}" id="tab-{{ page.index }}">
7171
{% for row in page.layout.allRows %}
72-
{{ rowMacro.render(row, submission, fieldRenderer) }}
72+
{{ rowMacro.render(row, submission) }}
7373
{% endfor %}
7474
</div>
7575
{% endfor %}

packages/plugin/src/templates/submissions/fields/group.twig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
{% for groupRow in field.layout %}
77

8-
{{ rowMacros.render(groupRow, submission, fieldRenderer) }}
8+
{{ rowMacros.render(groupRow, submission) }}
99

1010
{% endfor %}
1111

packages/plugin/src/templates/submissions/macros/row.twig

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
{% macro render(row, submission, fieldRenderer) %}
1+
{% macro render(row, submission) %}
22
{% import "_includes/forms" as forms %}
33

44
<div class="fields-row">
@@ -14,7 +14,7 @@
1414
},
1515
}) }}
1616

17-
{{ fieldRenderer|call(field, submission) }}
17+
{{ craft.freeformSubmissions.renderSubmissionField(field, submission) }}
1818

1919
{{ field.renderContainerClosingTag }}
2020
{% endfor %}

0 commit comments

Comments
 (0)