Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
bf77876
FIX: RCE vulnerability https://github.com/Crocoblock/issues-tracker/i…
Gawuww Feb 11, 2026
a682ac8
FIX: after review https://github.com/Crocoblock/issues-tracker/issues…
Gawuww Feb 11, 2026
e8655b7
FIX: after review https://github.com/Crocoblock/issues-tracker/issues…
Gawuww Feb 11, 2026
5a3cccd
FIX: after review https://github.com/Crocoblock/issues-tracker/issues…
Gawuww Feb 12, 2026
594a263
FIX: after review https://github.com/Crocoblock/issues-tracker/issues…
Gawuww Feb 12, 2026
cfb47dd
Merge pull request #611 from Crocoblock/issue/19124
Gawuww Feb 12, 2026
f4e7216
UPD: version bump and changelog
Gawuww Feb 12, 2026
ee9a266
Update AI review model to gpt-5-mini
Crocoblock Feb 17, 2026
21e39ed
ADD: filter for Form Record General Values Columns
aalexandr21 Mar 18, 2026
936e27f
FIX: LFI vulnerability https://github.com/Crocoblock/issues-tracker/i…
Gawuww Mar 19, 2026
38cb875
ADD: Support preview for AVIF files in Media Field https://github.com…
Gawuww Mar 19, 2026
eb0b83f
DEL: Remove logs https://github.com/Crocoblock/issues-tracker/issues/…
Gawuww Mar 19, 2026
4248891
FIX: after review https://github.com/Crocoblock/issues-tracker/issues…
Gawuww Mar 19, 2026
fcf19e6
Merge pull request #619 from Crocoblock/issue/19425
Gawuww Mar 19, 2026
ff6907a
Merge pull request #620 from Crocoblock/issue/19433
Gawuww Mar 19, 2026
cf1afaa
FIX: phpcs
Gawuww Mar 19, 2026
18976b1
Merge pull request #618 from aalexandr21/main
Gawuww Mar 19, 2026
eb0c424
UPD: version bump and changelog
Gawuww Mar 19, 2026
41bc5c2
ADD: `jet-form-builder/form-record/export/get-blocks-by-post` filter
aalexandr21 Mar 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/ai-pr-review.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ jobs:

# Job-level environment
env:
AI_REVIEW_MODEL: gpt-4.1-mini
AI_REVIEW_MODEL: gpt-5-mini

permissions:
contents: read # to read the repo
Expand Down
8 changes: 8 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,14 @@ You can report security bugs through the Patchstack Vulnerability Disclosure Pro

## ChangeLog

## 3.5.6.3
* ADD: Support preview for AVIF files in Media Field
* ADD: `jet-form-builder/form-record/general-values-columns` filter for Form Record General Values Columns
* FIX: LFI vulnerability

## 3.5.6.2
* FIX: RCE vulnerability

## 3.5.6.1
* FIX: Compatibility with jetBooking 4.0.0

Expand Down
2 changes: 1 addition & 1 deletion assets/build/frontend/advanced.reporting.asset.php
Original file line number Diff line number Diff line change
@@ -1 +1 @@
<?php return array('dependencies' => array('wp-api-fetch'), 'version' => '8ff3219219229b3acd2f');
<?php return array('dependencies' => array('wp-api-fetch'), 'version' => 'cd9019dc6f52cd8ab6d0');
2 changes: 1 addition & 1 deletion assets/build/frontend/advanced.reporting.js

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,11 @@ function ServerSideCallback() {
formData.append( '_jfb_validation_path[]', pathElement );
}

// Security: Include signature for SSR validation
if ( this.attrs._sig ) {
formData.set( '_jfb_validation_sig', this.attrs._sig );
}

return formData;
};

Expand Down
2 changes: 1 addition & 1 deletion includes/blocks/render/media-field-render.php
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ protected function render_previews(): string {
// preset field
$updated = str_replace( '<!-- field -->', $this->get_field_preset( $file ), $updated );

$image_ext = array( 'jpg', 'jpeg', 'jpe', 'gif', 'png', 'svg', 'webp' );
$image_ext = array( 'jpg', 'jpeg', 'jpe', 'gif', 'png', 'svg', 'webp', 'avif' );
$img_ext_preg = '!\.(' . join( '|', $image_ext ) . ')$!i';

if ( preg_match( $img_ext_preg, $file['url'] ) ) {
Expand Down
8 changes: 7 additions & 1 deletion includes/classes/resources/file-tools.php
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,13 @@ public static function get_uploaded( File $file, $preset ) {
}

protected static function is_same_file( File $file, Uploaded_File $uploaded_file ): bool {
$info = pathinfo( $uploaded_file->get_url() );
$preset_path = $uploaded_file->get_attachment_file();

if ( ! $preset_path ) {
return false;
}

$info = pathinfo( $preset_path );

return $file->get_name() === ( $info['basename'] ?? '' );
}
Expand Down
63 changes: 56 additions & 7 deletions includes/classes/resources/uploaded-file.php
Original file line number Diff line number Diff line change
Expand Up @@ -96,17 +96,17 @@ public function add_attachment() {

public function set_from_array( array $upload ): Uploaded_File {
if ( isset( $upload['file'] ) ) {
$this->file = $upload['file'];
$this->file = self::normalize_allowed_upload_file_path( (string) $upload['file'] );
}
if ( isset( $upload['url'] ) ) {
$this->url = $upload['url'];
$this->url = esc_url_raw( (string) $upload['url'] );
}
if ( isset( $upload['type'] ) ) {
$this->type = $upload['type'];
$this->type = sanitize_mime_type( (string) $upload['type'] );
}
if ( isset( $upload['id'] ) ) {

$this->set_attachment_id( (string) $upload['id'] );
$this->set_attachment_id( (string) absint( $upload['id'] ) );
}

return $this;
Expand Down Expand Up @@ -185,7 +185,10 @@ public function get_attachment_file(): string {
$file = $this->get_file();

if ( $file ) {
return $file;
$file = self::normalize_allowed_upload_file_path( $file );
if ( $file ) {
return $file;
}
}

$id = $this->get_attachment_id();
Expand All @@ -197,13 +200,59 @@ public function get_attachment_file(): string {

$file = get_attached_file( $id );

return is_string( $file ) ? $file : '';
if ( ! is_string( $file ) ) {
return '';
}

return self::normalize_allowed_upload_file_path( $file );
}

/**
* @param string $url
*/
public function set_url( string $url ) {
$this->url = $url;
$this->url = esc_url_raw( $url );
}

/**
* Normalize path and allow only existing files inside wp-content uploads directory.
*
* @return string Normalized realpath to a file in uploads, or empty string.
*/
public static function normalize_allowed_upload_file_path( string $file ): string {
if ( '' === $file ) {
return '';
}

$path = wp_normalize_path( $file );
$real = realpath( $path );

if ( false === $real ) {
return '';
}

$real = wp_normalize_path( $real );
$real = untrailingslashit( $real );

$uploads = wp_get_upload_dir();
$base = (string) ( $uploads['basedir'] ?? '' );

if ( '' === $base ) {
return '';
}

$base_real = realpath( $base );
if ( false === $base_real ) {
return '';
}

$base = wp_normalize_path( $base_real );
$base = untrailingslashit( $base );

if ( 0 === strpos( $real, $base . '/' ) && is_file( $real ) ) {
return $real;
}

return '';
}
}
4 changes: 2 additions & 2 deletions jet-form-builder.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
* Plugin Name: JetFormBuilder
* Plugin URI: https://jetformbuilder.com/
* Description: Advanced form builder plugin for WordPress block editor. Create forms from the ground up, customize the existing ones, and style them up – all in one editor.
* Version: 3.5.6.1
* Version: 3.5.6.3
* Author: Crocoblock
* Author URI: https://crocoblock.com/
* Text Domain: jet-form-builder
Expand All @@ -18,7 +18,7 @@
die();
}

const JET_FORM_BUILDER_VERSION = '3.5.6.1';
const JET_FORM_BUILDER_VERSION = '3.5.6.3';

const JET_FORM_BUILDER__FILE__ = __FILE__;
const JET_FORM_BUILDER_SITE = 'https://jetformbuilder.com';
Expand Down
25 changes: 24 additions & 1 deletion modules/actions-v2/send-email/send-email-action.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
use Jet_Form_Builder\Actions\Action_Handler;
use Jet_Form_Builder\Actions\Types\Base;
use Jet_Form_Builder\Classes\Http\Http_Tools;
use Jet_Form_Builder\Classes\Resources\Uploaded_File;
use Jet_Form_Builder\Classes\Tools;
use Jet_Form_Builder\Exceptions\Action_Exception;
use Jet_Form_Builder\Request\Request_Tools;
Expand Down Expand Up @@ -397,7 +398,29 @@ public function get_default_attachments(): array {
);
}

return $attachments;
return $this->filter_safe_attachments( $attachments );
}

/**
* Allow only readable files within the uploads directory.
*/
private function filter_safe_attachments( array $attachments ): array {
$safe = array();

foreach ( $attachments as $attachment ) {
if ( ! is_string( $attachment ) || '' === $attachment ) {
continue;
}

$allowed = Uploaded_File::normalize_allowed_upload_file_path( $attachment );
if ( '' === $allowed || ! is_file( $allowed ) || ! is_readable( $allowed ) ) {
continue;
}

$safe[] = $allowed;
}

return array_values( array_unique( $safe ) );
}

public function update_headers() {
Expand Down
22 changes: 13 additions & 9 deletions modules/form-record/admin/meta-boxes/form-record-values-box.php
Original file line number Diff line number Diff line change
Expand Up @@ -37,15 +37,19 @@ public function get_dependencies(): array {
}

public function get_columns(): array {
return array(
'form' => new Form_Link_Column(),
'referrer' => new Referrer_Link_Column(),
'status' => new Status_Column(),
'user' => new User_Login_Column(),
'ip_address' => new Ip_Address_Column(),
'user_agent' => new User_Agent_Column(),
'created_at' => new Created_At_Column(),
'updated_at' => new Updated_At_Column(),
return apply_filters(
'jet-form-builder/form-record/general-values-columns',
array(
'form' => new Form_Link_Column(),
'referrer' => new Referrer_Link_Column(),
'status' => new Status_Column(),
'user' => new User_Login_Column(),
'ip_address' => new Ip_Address_Column(),
'user_agent' => new User_Agent_Column(),
'created_at' => new Created_At_Column(),
'updated_at' => new Updated_At_Column(),
),
$this
);
}

Expand Down
7 changes: 5 additions & 2 deletions modules/form-record/export/multiple-controller.php
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,12 @@ public function do_export() {
$this->form_id = $this->get_form_id();

// set fields without request
jet_fb_context()->set_parsers(
Block_Helper::get_blocks_by_post( $this->form_id )
$blocks = apply_filters(
'jet-form-builder/form-record/export/get-blocks-by-post',
Block_Helper::get_blocks_by_post( $this->form_id ),
$this->form_id
);
jet_fb_context()->set_parsers( $blocks );

$this->fields_columns = $this->get_field_columns();
$this->modify_extra_columns();
Expand Down
Loading
Loading