From ea794e50b67e5e8242e1dce3dc8a4fc7bddd4012 Mon Sep 17 00:00:00 2001 From: Darin Kotter Date: Tue, 3 Dec 2024 10:39:37 -0700 Subject: [PATCH 1/8] Revert changes from 216 --- safe-svg.php | 54 ++++++++++++------------------------ tests/unit/test-safe-svg.php | 6 ++-- 2 files changed, 20 insertions(+), 40 deletions(-) diff --git a/safe-svg.php b/safe-svg.php index 6486b05..256c7fc 100644 --- a/safe-svg.php +++ b/safe-svg.php @@ -444,9 +444,9 @@ public function fix_admin_preview( $response, $attachment, $meta ) { */ public function one_pixel_fix( $image, $attachment_id, $size, $icon ) { if ( get_post_mime_type( $attachment_id ) === 'image/svg+xml' ) { - $dimensions = $this->get_svg_dimensions( $attachment_id, $size ); + $dimensions = $this->svg_dimensions( $attachment_id, $size ); - if ( is_array( $dimensions ) && isset( $dimensions['height'], $dimensions['width'] ) ) { + if ( $dimensions ) { $image[1] = $dimensions['width']; $image[2] = $dimensions['height']; } else { @@ -499,12 +499,23 @@ public function load_custom_admin_style() { */ public function get_image_tag_override( $html, $id, $alt, $title, $align, $size ) { $mime = get_post_mime_type( $id ); + if ( 'image/svg+xml' === $mime ) { - $dimensions = $this->get_svg_dimensions( $id, $size ); + if ( is_array( $size ) ) { + $width = $size[0]; + $height = $size[1]; + // phpcs:ignore WordPress.CodeAnalysis.AssignmentInCondition.Found, Squiz.PHP.DisallowMultipleAssignments.FoundInControlStructure + } elseif ( 'full' === $size && $dimensions = $this->svg_dimensions( $id ) ) { + $width = $dimensions['width']; + $height = $dimensions['height']; + } else { + $width = get_option( "{$size}_size_w", false ); + $height = get_option( "{$size}_size_h", false ); + } - if ( is_array( $dimensions ) && isset( $dimensions['height'], $dimensions['width'] ) ) { - $html = str_replace( 'width="1" ', sprintf( 'width="%s" ', $dimensions['width'] ), $html ); - $html = str_replace( 'height="1" ', sprintf( 'height="%s" ', $dimensions['height'] ), $html ); + if ( $height && $width ) { + $html = str_replace( 'width="1" ', sprintf( 'width="%s" ', $width ), $html ); + $html = str_replace( 'height="1" ', sprintf( 'height="%s" ', $height ), $html ); } else { $html = str_replace( 'width="1" ', '', $html ); $html = str_replace( 'height="1" ', '', $html ); @@ -765,37 +776,6 @@ protected function str_ends_with( $haystack, $needle ) { $len = strlen( $needle ); return 0 === substr_compare( $haystack, $needle, -$len, $len ); } - - /** - * Return custom width or height of the SVG image. - * - * @param int $id Image attachment ID. - * @param string|array $size Size of image. Image size or array of width and height values - * (in that order). Default 'thumbnail'. - * - * @return array|bool Width or height of the SVG image, or false if not found. - */ - protected function get_svg_dimensions( $id, $size ) { - $dimensions = $this->svg_dimensions( $id ); - - if ( is_array( $size ) ) { - $width = $size[0]; - $height = $size[1]; - } elseif ( 'full' === $size && is_array( $dimensions ) && isset( $dimensions['width'], $dimensions['height'] ) ) { - $width = $dimensions['width']; - $height = $dimensions['height']; - } else { - $width = get_option( "{$size}_size_w", false ); - $height = get_option( "{$size}_size_h", false ); - } - - if ( $dimensions ) { - $dimensions['width'] = $width; - $dimensions['height'] = $height; - } - - return $dimensions; - } } } diff --git a/tests/unit/test-safe-svg.php b/tests/unit/test-safe-svg.php index a7b4c56..1272d8d 100644 --- a/tests/unit/test-safe-svg.php +++ b/tests/unit/test-safe-svg.php @@ -275,7 +275,7 @@ public function test_one_pixel_fix() { ); // Test SVG Dimensions - $image_sizes = $this->instance->one_pixel_fix( array(), 1, 'full', false ); + $image_sizes = $this->instance->one_pixel_fix( array(), 1, 'thumbnail', false ); if ( ! empty( $image_sizes ) ) { $image_sizes = array_map( 'intval', $image_sizes ); } @@ -307,8 +307,8 @@ public function test_one_pixel_fix() { } $this->assertSame( array( - 1 => 500, - 2 => 500, + 1 => 600, + 2 => 600, ), $image_sizes ); From 74f6e48fad918ae62092c4ae66e3d0cbf282a34e Mon Sep 17 00:00:00 2001 From: Darin Kotter Date: Tue, 3 Dec 2024 10:59:27 -0700 Subject: [PATCH 2/8] Add E2E tests for testing the output of wp_get_attachment_image and get_image_tag --- safe-svg.php | 3 +- tests/cypress/e2e/safe-svg.cy.js | 37 +++++++++++++++++++ tests/cypress/test-plugin/e2e-test-plugin.php | 16 ++++++++ 3 files changed, 54 insertions(+), 2 deletions(-) diff --git a/safe-svg.php b/safe-svg.php index 256c7fc..326399a 100644 --- a/safe-svg.php +++ b/safe-svg.php @@ -504,8 +504,7 @@ public function get_image_tag_override( $html, $id, $alt, $title, $align, $size if ( is_array( $size ) ) { $width = $size[0]; $height = $size[1]; - // phpcs:ignore WordPress.CodeAnalysis.AssignmentInCondition.Found, Squiz.PHP.DisallowMultipleAssignments.FoundInControlStructure - } elseif ( 'full' === $size && $dimensions = $this->svg_dimensions( $id ) ) { + } elseif ( 'full' === $size && $dimensions = $this->svg_dimensions( $id ) ) { // phpcs:ignore WordPress.CodeAnalysis.AssignmentInCondition.Found, Squiz.PHP.DisallowMultipleAssignments.FoundInControlStructure $width = $dimensions['width']; $height = $dimensions['height']; } else { diff --git a/tests/cypress/e2e/safe-svg.cy.js b/tests/cypress/e2e/safe-svg.cy.js index 00e7cb7..9038d18 100644 --- a/tests/cypress/e2e/safe-svg.cy.js +++ b/tests/cypress/e2e/safe-svg.cy.js @@ -105,4 +105,41 @@ describe('Safe SVG Tests', () => { cy.activatePlugin('safe-svg-cypress-optimizer-test-plugin'); cy.createPost('Hello World'); }); + + it('Output of wp_get_attachment_image should use full svg dimensions', () => { + // Activate test plugin. + cy.activatePlugin('safe-svg-cypress-test-plugin'); + + // Visit the home page. + cy.visit('/'); + + // Verify that the SVG images are displayed with the correct dimensions. + cy.get('#thumbnail-image').should('have.attr', 'width', '256').should('have.attr', 'height', '256'); + cy.get('#medium-image').should('have.attr', 'width', '256').should('have.attr', 'height', '256'); + cy.get('#large-image').should('have.attr', 'width', '256').should('have.attr', 'height', '256'); + cy.get('#full-image').should('have.attr', 'width', '256').should('have.attr', 'height', '256'); + cy.get('#custom-image').should('have.attr', 'width', '256').should('have.attr', 'height', '256'); + + // Deactivate the test plugin. + cy.deactivatePlugin('safe-svg-cypress-test-plugin'); + }); + + it('Output of get_image_tag should use custom dimensions', () => { + // Activate test plugin. + cy.activatePlugin('safe-svg-cypress-test-plugin'); + + // Visit the home page. + cy.visit('/'); + + // Verify that the SVG images are displayed with the correct dimensions. + // TODO: these are the sizes returned but seems they are not correct. get_image_tag_override needs to be fixed. + cy.get('.size-thumbnail.wp-image-6').should('have.attr', 'width', '150').should('have.attr', 'height', '150'); + cy.get('.size-medium.wp-image-6').should('have.attr', 'width', '300').should('have.attr', 'height', '300'); + cy.get('.size-large.wp-image-6').should('have.attr', 'width', '1024').should('have.attr', 'height', '1024'); + cy.get('.size-full.wp-image-6').should('have.attr', 'width', '256').should('have.attr', 'height', '256'); + cy.get('.size-100x120.wp-image-6').should('have.attr', 'width', '100').should('have.attr', 'height', '100'); + + // Deactivate the test plugin. + cy.deactivatePlugin('safe-svg-cypress-test-plugin'); + }); }); diff --git a/tests/cypress/test-plugin/e2e-test-plugin.php b/tests/cypress/test-plugin/e2e-test-plugin.php index b01810b..0689e06 100644 --- a/tests/cypress/test-plugin/e2e-test-plugin.php +++ b/tests/cypress/test-plugin/e2e-test-plugin.php @@ -21,3 +21,19 @@ function ( $tags ) { return $tags; } ); + +add_action( + 'wp_body_open', + function () { + echo wp_get_attachment_image( 6, 'thumbnail', false, [ 'id' => 'thumbnail-image' ] ); + echo wp_get_attachment_image( 6, 'medium', false, [ 'id' => 'medium-image' ] ); + echo wp_get_attachment_image( 6, 'large', false, [ 'id' => 'large-image' ] ); + echo wp_get_attachment_image( 6, 'full', false, [ 'id' => 'full-image' ] ); + echo wp_get_attachment_image( 6, [ 100, 120 ], false, [ 'id' => 'custom-image' ] ); + echo get_image_tag( 6, '', '', '', 'thumbnail' ); + echo get_image_tag( 6, '', '', '', 'medium' ); + echo get_image_tag( 6, '', '', '', 'large' ); + echo get_image_tag( 6, '', '', '', 'full' ); + echo get_image_tag( 6, '', '', '', [ 100, 120 ] ); + } +); From fab05a2e189471648a9e03a11aa24f382993a6ae Mon Sep 17 00:00:00 2001 From: Darin Kotter Date: Tue, 3 Dec 2024 11:15:12 -0700 Subject: [PATCH 3/8] Fix spacing --- safe-svg.php | 4 +- tests/cypress/e2e/safe-svg.cy.js | 76 ++++++++++++++++---------------- 2 files changed, 40 insertions(+), 40 deletions(-) diff --git a/safe-svg.php b/safe-svg.php index 326399a..548d869 100644 --- a/safe-svg.php +++ b/safe-svg.php @@ -256,7 +256,7 @@ public function check_for_svg( $file ) { return $file; } - $file_name = isset( $file['name'] ) ? $file['name'] : ''; + $file_name = isset( $file['name'] ) ? $file['name'] : ''; // Allow SVGs to be uploaded when this function runs. add_filter( 'upload_mimes', array( $this, 'allow_svg' ) ); @@ -269,7 +269,7 @@ public function check_for_svg( $file ) { // This is because wp_check_filetype_and_ext() is called multiple times during the upload process. add_filter( 'pre_move_uploaded_file', array( $this, 'pre_move_uploaded_file' ) ); - $type = ! empty( $wp_filetype['type'] ) ? $wp_filetype['type'] : ''; + $type = ! empty( $wp_filetype['type'] ) ? $wp_filetype['type'] : ''; if ( 'image/svg+xml' === $type ) { if ( ! $this->current_user_can_upload_svg() ) { diff --git a/tests/cypress/e2e/safe-svg.cy.js b/tests/cypress/e2e/safe-svg.cy.js index 9038d18..5e033b9 100644 --- a/tests/cypress/e2e/safe-svg.cy.js +++ b/tests/cypress/e2e/safe-svg.cy.js @@ -16,21 +16,21 @@ describe('Safe SVG Tests', () => { }); it('Admin can add SVG block to a post', () => { - cy.uploadMedia('.wordpress-org/icon.svg'); - - cy.createPost( { - title: 'SVG Block Test', - beforeSave: () => { - cy.insertBlock( 'safe-svg/svg-icon' ); - cy.getBlockEditor().find( '.block-editor-media-placeholder' ).contains( 'button', 'Media Library' ).click(); - cy.get( '#menu-item-browse' ).click(); - cy.get( '.attachments-wrapper li:first .thumbnail' ).click(); - cy.get( '.media-modal .media-button-select' ).click(); - }, - } ).then( post => { - cy.visit( `/wp-admin/post.php?post=${post.id}&action=edit` ); - cy.getBlockEditor().find( '.wp-block-safe-svg-svg-icon' ); - } ); + cy.uploadMedia('.wordpress-org/icon.svg'); + + cy.createPost( { + title: 'SVG Block Test', + beforeSave: () => { + cy.insertBlock( 'safe-svg/svg-icon' ); + cy.getBlockEditor().find( '.block-editor-media-placeholder' ).contains( 'button', 'Media Library' ).click(); + cy.get( '#menu-item-browse' ).click(); + cy.get( '.attachments-wrapper li:first .thumbnail' ).click(); + cy.get( '.media-modal .media-button-select' ).click(); + }, + } ).then( post => { + cy.visit( `/wp-admin/post.php?post=${post.id}&action=edit` ); + cy.getBlockEditor().find( '.wp-block-safe-svg-svg-icon' ); + } ); } ); /** @@ -49,8 +49,8 @@ describe('Safe SVG Tests', () => { // Test cy.uploadMedia('tests/cypress/fixtures/custom.svg'); cy.get('#media-items .media-item a.edit-attachment').invoke('attr', 'href').then(editLink => { - cy.visit(editLink); - } ); + cy.visit(editLink); + } ); cy.get('input#attachment_url').invoke('val') .then(url => { cy.request(url) @@ -74,8 +74,8 @@ describe('Safe SVG Tests', () => { cy.uploadMedia('tests/cypress/fixtures/custom.svg'); cy.get('#media-items .media-item a.edit-attachment').invoke('attr', 'href').then(editLink => { - cy.visit( editLink ); - }); + cy.visit( editLink ); + }); cy.get('input#attachment_url').invoke('val') .then(url => { cy.request(url) @@ -110,36 +110,36 @@ describe('Safe SVG Tests', () => { // Activate test plugin. cy.activatePlugin('safe-svg-cypress-test-plugin'); - // Visit the home page. + // Visit the home page. cy.visit('/'); - // Verify that the SVG images are displayed with the correct dimensions. - cy.get('#thumbnail-image').should('have.attr', 'width', '256').should('have.attr', 'height', '256'); - cy.get('#medium-image').should('have.attr', 'width', '256').should('have.attr', 'height', '256'); - cy.get('#large-image').should('have.attr', 'width', '256').should('have.attr', 'height', '256'); - cy.get('#full-image').should('have.attr', 'width', '256').should('have.attr', 'height', '256'); - cy.get('#custom-image').should('have.attr', 'width', '256').should('have.attr', 'height', '256'); + // Verify that the SVG images are displayed with the correct dimensions. + cy.get('#thumbnail-image').should('have.attr', 'width', '256').should('have.attr', 'height', '256'); + cy.get('#medium-image').should('have.attr', 'width', '256').should('have.attr', 'height', '256'); + cy.get('#large-image').should('have.attr', 'width', '256').should('have.attr', 'height', '256'); + cy.get('#full-image').should('have.attr', 'width', '256').should('have.attr', 'height', '256'); + cy.get('#custom-image').should('have.attr', 'width', '256').should('have.attr', 'height', '256'); - // Deactivate the test plugin. - cy.deactivatePlugin('safe-svg-cypress-test-plugin'); + // Deactivate the test plugin. + cy.deactivatePlugin('safe-svg-cypress-test-plugin'); }); it('Output of get_image_tag should use custom dimensions', () => { // Activate test plugin. cy.activatePlugin('safe-svg-cypress-test-plugin'); - // Visit the home page. + // Visit the home page. cy.visit('/'); - // Verify that the SVG images are displayed with the correct dimensions. - // TODO: these are the sizes returned but seems they are not correct. get_image_tag_override needs to be fixed. - cy.get('.size-thumbnail.wp-image-6').should('have.attr', 'width', '150').should('have.attr', 'height', '150'); - cy.get('.size-medium.wp-image-6').should('have.attr', 'width', '300').should('have.attr', 'height', '300'); - cy.get('.size-large.wp-image-6').should('have.attr', 'width', '1024').should('have.attr', 'height', '1024'); - cy.get('.size-full.wp-image-6').should('have.attr', 'width', '256').should('have.attr', 'height', '256'); - cy.get('.size-100x120.wp-image-6').should('have.attr', 'width', '100').should('have.attr', 'height', '100'); + // Verify that the SVG images are displayed with the correct dimensions. + // TODO: these are the sizes returned but seems they are not correct. get_image_tag_override needs to be fixed. + cy.get('.size-thumbnail.wp-image-6').should('have.attr', 'width', '150').should('have.attr', 'height', '150'); + cy.get('.size-medium.wp-image-6').should('have.attr', 'width', '300').should('have.attr', 'height', '300'); + cy.get('.size-large.wp-image-6').should('have.attr', 'width', '1024').should('have.attr', 'height', '1024'); + cy.get('.size-full.wp-image-6').should('have.attr', 'width', '256').should('have.attr', 'height', '256'); + cy.get('.size-100x120.wp-image-6').should('have.attr', 'width', '100').should('have.attr', 'height', '100'); - // Deactivate the test plugin. - cy.deactivatePlugin('safe-svg-cypress-test-plugin'); + // Deactivate the test plugin. + cy.deactivatePlugin('safe-svg-cypress-test-plugin'); }); }); From f773bbe2e55eff06c88d45c9a62c3b770a5f081a Mon Sep 17 00:00:00 2001 From: Darin Kotter Date: Thu, 5 Dec 2024 08:14:25 -0700 Subject: [PATCH 4/8] Version bump to 2.3.1 --- package-lock.json | 4 ++-- package.json | 2 +- readme.txt | 2 +- safe-svg.php | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6fe8109..1608530 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@10up/safe-svg", - "version": "2.3.0", + "version": "2.3.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@10up/safe-svg", - "version": "2.3.0", + "version": "2.3.1", "license": "GPL-2.0-or-later", "dependencies": { "react-svg": "^16.1.18", diff --git a/package.json b/package.json index 49eab67..a631f5b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@10up/safe-svg", - "version": "2.3.0", + "version": "2.3.1", "description": "Enable SVG uploads and sanitize them to stop XML/SVG vulnerabilities in your WordPress website", "homepage": "https://github.com/10up/safe-svg#readme", "license": "GPL-2.0-or-later", diff --git a/readme.txt b/readme.txt index 8527d51..52f6ebe 100644 --- a/readme.txt +++ b/readme.txt @@ -2,7 +2,7 @@ Contributors: 10up, enshrined, jeffpaul Tags: svg, security, media, vector, mime Tested up to: 6.7 -Stable tag: 2.3.0 +Stable tag: 2.3.1 License: GPL-2.0-or-later License URI: https://spdx.org/licenses/GPL-2.0-or-later.html diff --git a/safe-svg.php b/safe-svg.php index 548d869..4f01f81 100644 --- a/safe-svg.php +++ b/safe-svg.php @@ -3,7 +3,7 @@ * Plugin Name: Safe SVG * Plugin URI: https://wordpress.org/plugins/safe-svg/ * Description: Enable SVG uploads and sanitize them to stop XML/SVG vulnerabilities in your WordPress website - * Version: 2.3.0 + * Version: 2.3.1 * Requires at least: 6.5 * Requires PHP: 7.4 * Author: 10up @@ -24,7 +24,7 @@ exit; // Exit if accessed directly. } -define( 'SAFE_SVG_VERSION', '2.3.0' ); +define( 'SAFE_SVG_VERSION', '2.3.1' ); define( 'SAFE_SVG_PLUGIN_DIR', __DIR__ ); define( 'SAFE_SVG_PLUGIN_URL', plugin_dir_url( __FILE__ ) ); From c470f33a11f94c9bc2074cca3636e0de4c18f3e6 Mon Sep 17 00:00:00 2001 From: Darin Kotter Date: Thu, 5 Dec 2024 08:16:58 -0700 Subject: [PATCH 5/8] Update changelogs --- CHANGELOG.md | 4 ++++ readme.txt | 3 +++ 2 files changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 567d5d8..d746ab2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,10 @@ All notable changes to this project will be documented in this file, per [the Ke ## [Unreleased] - TBD +## [2.3.1] - 2024-12-05 +### Fixed +- Revert changes made to how we determine custom dimensions for SVGs (props [@dkotter](https://github.com/dkotter), [@martinpl](https://github.com/martinpl), [@subfighter3](https://github.com/subfighter3), [@smerriman](https://github.com/smerriman), [@gigatyrant](https://github.com/gigatyrant), [@jeffpaul](https://github.com/jeffpaul), [@iamdharmesh](https://github.com/iamdharmesh) via [#238](https://github.com/10up/safe-svg/pull/238)). + ## [2.3.0] - 2024-11-25 **Note that this release bumps the WordPress minimum version from 6.4 to 6.5.** diff --git a/readme.txt b/readme.txt index 52f6ebe..78e4c11 100644 --- a/readme.txt +++ b/readme.txt @@ -64,6 +64,9 @@ They take one argument that must be returned. See below for examples: == Changelog == += 2.3.1 - 2024-12-05 = +* **Fixed:** Revert changes made to how we determine custom dimensions for SVGs (props [@dkotter](https://github.com/dkotter), [@martinpl](https://github.com/martinpl), [@subfighter3](https://github.com/subfighter3), [@smerriman](https://github.com/smerriman), [@gigatyrant](https://github.com/gigatyrant), [@jeffpaul](https://github.com/jeffpaul), [@iamdharmesh](https://github.com/iamdharmesh) via [#238](https://github.com/10up/safe-svg/pull/238)). + = 2.3.0 - 2024-11-25 = * **Added:** New setting that allows large SVG files (roughly 10MB or greater) to be uploaded and sanitized properly (props [@kirtangajjar](https://github.com/kirtangajjar), [@faisal-alvi](https://github.com/faisal-alvi), [@darylldoyle](https://github.com/darylldoyle), [@manojsiddoji](https://github.com/manojsiddoji), [@dkotter](https://github.com/dkotter) via [#201](https://github.com/10up/safe-svg/pull/201)). * **Added:** New `get_svg_dimensions` function in order to reduce code duplication (props [@gabriel-glo](https://github.com/gabriel-glo), [@jeremymoore](https://github.com/jeremymoore), [@darylldoyle](https://github.com/darylldoyle), [@iamdharmesh](https://github.com/iamdharmesh), [@dkotter](https://github.com/dkotter) via [#216](https://github.com/10up/safe-svg/pull/216)). From 2fbb7d39358503ebb481caa1109aee9b79c37dbb Mon Sep 17 00:00:00 2001 From: Darin Kotter Date: Thu, 5 Dec 2024 08:18:26 -0700 Subject: [PATCH 6/8] Update CREDITS.md --- CREDITS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CREDITS.md b/CREDITS.md index f1f30e4..ea980cf 100644 --- a/CREDITS.md +++ b/CREDITS.md @@ -12,7 +12,7 @@ The following individuals are responsible for curating the list of issues, respo Thank you to all the people who have already contributed to this repository via bug reports, code, design, ideas, project management, translation, testing, etc. -[Daryll Doyle (@darylldoyle)](https://github.com/darylldoyle), [Lewis Cowles (@LewisCowles1986)](https://github.com/LewisCowles1986), [Daniel M. Hendricks (@dmhendricks)](https://github.com/dmhendricks), [Dan Pock (@mallardduck)](https://github.com/mallardduck), [K. Adam White (@kadamwhite)](https://github.com/kadamwhite), [Joe Hoyle (@joehoyle)](https://github.com/joehoyle), [Jeffrey Paul (@jeffpaul)](https://github.com/jeffpaul), [Brandon Berg (@BBerg10up)](https://github.com/BBerg10up), [Max Lyuchin (@cadic)](https://github.com/cadic), [Mehidi Hassan (@mehidi258)](https://github.com/mehidi258), [Dharmesh Patel (@iamdharmesh)](https://github.com/iamdharmesh), [Timothy Decker (@amdd-tim)](https://github.com/amdd-tim), [Brooke Campbell](https://www.linkedin.com/in/brookecampbelldesign/), [Mehul Kaklotar (@mehulkaklotar)](https://github.com/mehulkaklotar), [@smerriman](https://github.com/smerriman), [Darin Kotter (@dkotter)](https://github.com/dkotter), [Manuel Friedli (@fritteli)](https://github.com/fritteli), [David Hamann (@davidhamann)](https://github.com/davidhamann), [@j-hoffmann](https://github.com/j-hoffmann), [Peter Wilson (@peterwilsoncc)](https://github.com/peterwilsoncc), [Torsten Landsiedel (@Zodiac1978)](https://github.com/Zodiac1978), [Axel DUCORON (@aksld)](https://github.com/aksld), [Mario Rader (@r8r)](https://github.com/r8r), [Jeremy Turowetz (@jerturowetz)](https://github.com/jerturowetz), [Robert O'Rourke (@roborourke)](https://github.com/roborourke), [Dominik Schilling (@ocean90)](https://github.com/ocean90), [Adam Wills (@AdamWills)](https://github.com/AdamWills), [Faisal Alvi (@faisal-alvi)](https://github.com/faisal-alvi), [Siddharth Thevaril (@Sidsector9)](https://github.com/Sidsector9), [Cory Hughart (@cr0ybot)](https://github.com/cr0ybot), [Cory Birdsong (@cbirdsong)](https://github.com/cbirdsong), [Vikram Moparthy (@vikrampm1)](https://github.com/vikrampm1), [Garth Gutenberg (@ggutenberg)](https://github.com/ggutenberg), [Jayedul Kabir (@jayedul)](https://github.com/jayedul), [Marcel Freinbichler (@freinbichler)](https://github.com/freinbichler), [IanDelMar (@IanDelMar)](https://github.com/IanDelMar), [Ravinder Kumar (@ravinderk)](https://github.com/ravinderk), [GitHub Dependabot (@dependabot)](https://github.com/apps/dependabot), [Santiago Dimattia (@sdmtt)](https://github.com/sdmtt), [Ben Marshall (@bmarshall511)](https://github.com/bmarshall511), [Viktor Szépe (@szepeviktor)](https://github.com/szepeviktor), [Dhanendran Rajagopal (@dhanendran)](https://github.com/dhanendran), [Curtis Loisel (@csloisel)](https://github.com/csloisel), [Giorgos Sarigiannidis (@gsarig)](https://github.com/gsarig), [Fabian Kägy (@fabiankaegy)](https://github.com/fabiankaegy), [Quamruz Zaman (@zamanq)](https://github.com/zamanq), [Sumit Bagthariya (@qasumitbagthariya)](https://github.com/qasumitbagthariya), [Toby Schrapel (@tobeycodes)](https://github.com/tobeycodes), [Shazahan Kabir Saju (@sksaju)](https://github.com/sksaju), [Chris Abraham (@cjyabraham)](https://github.com/cjyabraham), [Hercilio Martins Ortiz (@Hercilio1)](https://github.com/Hercilio1), [Peter Sorensen (@psorensen)](https://github.com/psorensen), [Dave Adams (@tictag)](https://github.com/tictag), [Cormac Nicholson (@metashield-ie)](https://github.com/metashield-ie), [Konstantinos Galanakis (@kmgalanakis)](https://github.com/kmgalanakis), [(@liz1kiweno)](https://github.com/liz1kiweno), [Carlos G. (@cguidog)](https://github.com/cguidog), [Drazen Bebic (@drazenbebic)](https://github.com/drazenbebic), [Kirtan Gajjar (@kirtangajjar)](https://github.com/kirtangajjar), [Sudip Dadhaniya (@sudip-md)](https://github.com/sudip-md), [Ankit K Gupta (@ankitguptaindia)](https://github.com/ankitguptaindia), [Alex Concha (@xknown)](https://github.com/xknown), [Manoj Siddoji (@manojsiddoji)](https://github.com/manojsiddoji), [Gabriel Glogoški (@gabriel-glo)](https://github.com/gabriel-glo), [Jeremy Moore (@jeremymoore)](https://github.com/jeremymoore), [Tyler Bailey (@TylerB24890)](https://github.com/TylerB24890), [Rolf Siebers (@rolf-yoast)](https://github.com/rolf-yoast), [Colin Swinney (@colinswinney)](https://github.com/colinswinney). +[Daryll Doyle (@darylldoyle)](https://github.com/darylldoyle), [Lewis Cowles (@LewisCowles1986)](https://github.com/LewisCowles1986), [Daniel M. Hendricks (@dmhendricks)](https://github.com/dmhendricks), [Dan Pock (@mallardduck)](https://github.com/mallardduck), [K. Adam White (@kadamwhite)](https://github.com/kadamwhite), [Joe Hoyle (@joehoyle)](https://github.com/joehoyle), [Jeffrey Paul (@jeffpaul)](https://github.com/jeffpaul), [Brandon Berg (@BBerg10up)](https://github.com/BBerg10up), [Max Lyuchin (@cadic)](https://github.com/cadic), [Mehidi Hassan (@mehidi258)](https://github.com/mehidi258), [Dharmesh Patel (@iamdharmesh)](https://github.com/iamdharmesh), [Timothy Decker (@amdd-tim)](https://github.com/amdd-tim), [Brooke Campbell](https://www.linkedin.com/in/brookecampbelldesign/), [Mehul Kaklotar (@mehulkaklotar)](https://github.com/mehulkaklotar), [@smerriman](https://github.com/smerriman), [Darin Kotter (@dkotter)](https://github.com/dkotter), [Manuel Friedli (@fritteli)](https://github.com/fritteli), [David Hamann (@davidhamann)](https://github.com/davidhamann), [@j-hoffmann](https://github.com/j-hoffmann), [Peter Wilson (@peterwilsoncc)](https://github.com/peterwilsoncc), [Torsten Landsiedel (@Zodiac1978)](https://github.com/Zodiac1978), [Axel DUCORON (@aksld)](https://github.com/aksld), [Mario Rader (@r8r)](https://github.com/r8r), [Jeremy Turowetz (@jerturowetz)](https://github.com/jerturowetz), [Robert O'Rourke (@roborourke)](https://github.com/roborourke), [Dominik Schilling (@ocean90)](https://github.com/ocean90), [Adam Wills (@AdamWills)](https://github.com/AdamWills), [Faisal Alvi (@faisal-alvi)](https://github.com/faisal-alvi), [Siddharth Thevaril (@Sidsector9)](https://github.com/Sidsector9), [Cory Hughart (@cr0ybot)](https://github.com/cr0ybot), [Cory Birdsong (@cbirdsong)](https://github.com/cbirdsong), [Vikram Moparthy (@vikrampm1)](https://github.com/vikrampm1), [Garth Gutenberg (@ggutenberg)](https://github.com/ggutenberg), [Jayedul Kabir (@jayedul)](https://github.com/jayedul), [Marcel Freinbichler (@freinbichler)](https://github.com/freinbichler), [IanDelMar (@IanDelMar)](https://github.com/IanDelMar), [Ravinder Kumar (@ravinderk)](https://github.com/ravinderk), [GitHub Dependabot (@dependabot)](https://github.com/apps/dependabot), [Santiago Dimattia (@sdmtt)](https://github.com/sdmtt), [Ben Marshall (@bmarshall511)](https://github.com/bmarshall511), [Viktor Szépe (@szepeviktor)](https://github.com/szepeviktor), [Dhanendran Rajagopal (@dhanendran)](https://github.com/dhanendran), [Curtis Loisel (@csloisel)](https://github.com/csloisel), [Giorgos Sarigiannidis (@gsarig)](https://github.com/gsarig), [Fabian Kägy (@fabiankaegy)](https://github.com/fabiankaegy), [Quamruz Zaman (@zamanq)](https://github.com/zamanq), [Sumit Bagthariya (@qasumitbagthariya)](https://github.com/qasumitbagthariya), [Toby Schrapel (@tobeycodes)](https://github.com/tobeycodes), [Shazahan Kabir Saju (@sksaju)](https://github.com/sksaju), [Chris Abraham (@cjyabraham)](https://github.com/cjyabraham), [Hercilio Martins Ortiz (@Hercilio1)](https://github.com/Hercilio1), [Peter Sorensen (@psorensen)](https://github.com/psorensen), [Dave Adams (@tictag)](https://github.com/tictag), [Cormac Nicholson (@metashield-ie)](https://github.com/metashield-ie), [Konstantinos Galanakis (@kmgalanakis)](https://github.com/kmgalanakis), [(@liz1kiweno)](https://github.com/liz1kiweno), [Carlos G. (@cguidog)](https://github.com/cguidog), [Drazen Bebic (@drazenbebic)](https://github.com/drazenbebic), [Kirtan Gajjar (@kirtangajjar)](https://github.com/kirtangajjar), [Sudip Dadhaniya (@sudip-md)](https://github.com/sudip-md), [Ankit K Gupta (@ankitguptaindia)](https://github.com/ankitguptaindia), [Alex Concha (@xknown)](https://github.com/xknown), [Manoj Siddoji (@manojsiddoji)](https://github.com/manojsiddoji), [Gabriel Glogoški (@gabriel-glo)](https://github.com/gabriel-glo), [Jeremy Moore (@jeremymoore)](https://github.com/jeremymoore), [Tyler Bailey (@TylerB24890)](https://github.com/TylerB24890), [Rolf Siebers (@rolf-yoast)](https://github.com/rolf-yoast), [Colin Swinney (@colinswinney)](https://github.com/colinswinney), [Marcin Panniak (@martinpl)](https://github.com/martinpl), [Pyetro (@subfighter3)](https://github.com/subfighter3), [Romain Allard (@gigatyrant)](https://github.com/gigatyrant). ## Libraries From ad8e4fc7260f2b0b0846b407576eb3f78a5cc7a5 Mon Sep 17 00:00:00 2001 From: Jeffrey Paul Date: Thu, 5 Dec 2024 10:02:32 -0600 Subject: [PATCH 7/8] Update CREDITS.md --- CREDITS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CREDITS.md b/CREDITS.md index ea980cf..ad00d95 100644 --- a/CREDITS.md +++ b/CREDITS.md @@ -12,7 +12,7 @@ The following individuals are responsible for curating the list of issues, respo Thank you to all the people who have already contributed to this repository via bug reports, code, design, ideas, project management, translation, testing, etc. -[Daryll Doyle (@darylldoyle)](https://github.com/darylldoyle), [Lewis Cowles (@LewisCowles1986)](https://github.com/LewisCowles1986), [Daniel M. Hendricks (@dmhendricks)](https://github.com/dmhendricks), [Dan Pock (@mallardduck)](https://github.com/mallardduck), [K. Adam White (@kadamwhite)](https://github.com/kadamwhite), [Joe Hoyle (@joehoyle)](https://github.com/joehoyle), [Jeffrey Paul (@jeffpaul)](https://github.com/jeffpaul), [Brandon Berg (@BBerg10up)](https://github.com/BBerg10up), [Max Lyuchin (@cadic)](https://github.com/cadic), [Mehidi Hassan (@mehidi258)](https://github.com/mehidi258), [Dharmesh Patel (@iamdharmesh)](https://github.com/iamdharmesh), [Timothy Decker (@amdd-tim)](https://github.com/amdd-tim), [Brooke Campbell](https://www.linkedin.com/in/brookecampbelldesign/), [Mehul Kaklotar (@mehulkaklotar)](https://github.com/mehulkaklotar), [@smerriman](https://github.com/smerriman), [Darin Kotter (@dkotter)](https://github.com/dkotter), [Manuel Friedli (@fritteli)](https://github.com/fritteli), [David Hamann (@davidhamann)](https://github.com/davidhamann), [@j-hoffmann](https://github.com/j-hoffmann), [Peter Wilson (@peterwilsoncc)](https://github.com/peterwilsoncc), [Torsten Landsiedel (@Zodiac1978)](https://github.com/Zodiac1978), [Axel DUCORON (@aksld)](https://github.com/aksld), [Mario Rader (@r8r)](https://github.com/r8r), [Jeremy Turowetz (@jerturowetz)](https://github.com/jerturowetz), [Robert O'Rourke (@roborourke)](https://github.com/roborourke), [Dominik Schilling (@ocean90)](https://github.com/ocean90), [Adam Wills (@AdamWills)](https://github.com/AdamWills), [Faisal Alvi (@faisal-alvi)](https://github.com/faisal-alvi), [Siddharth Thevaril (@Sidsector9)](https://github.com/Sidsector9), [Cory Hughart (@cr0ybot)](https://github.com/cr0ybot), [Cory Birdsong (@cbirdsong)](https://github.com/cbirdsong), [Vikram Moparthy (@vikrampm1)](https://github.com/vikrampm1), [Garth Gutenberg (@ggutenberg)](https://github.com/ggutenberg), [Jayedul Kabir (@jayedul)](https://github.com/jayedul), [Marcel Freinbichler (@freinbichler)](https://github.com/freinbichler), [IanDelMar (@IanDelMar)](https://github.com/IanDelMar), [Ravinder Kumar (@ravinderk)](https://github.com/ravinderk), [GitHub Dependabot (@dependabot)](https://github.com/apps/dependabot), [Santiago Dimattia (@sdmtt)](https://github.com/sdmtt), [Ben Marshall (@bmarshall511)](https://github.com/bmarshall511), [Viktor Szépe (@szepeviktor)](https://github.com/szepeviktor), [Dhanendran Rajagopal (@dhanendran)](https://github.com/dhanendran), [Curtis Loisel (@csloisel)](https://github.com/csloisel), [Giorgos Sarigiannidis (@gsarig)](https://github.com/gsarig), [Fabian Kägy (@fabiankaegy)](https://github.com/fabiankaegy), [Quamruz Zaman (@zamanq)](https://github.com/zamanq), [Sumit Bagthariya (@qasumitbagthariya)](https://github.com/qasumitbagthariya), [Toby Schrapel (@tobeycodes)](https://github.com/tobeycodes), [Shazahan Kabir Saju (@sksaju)](https://github.com/sksaju), [Chris Abraham (@cjyabraham)](https://github.com/cjyabraham), [Hercilio Martins Ortiz (@Hercilio1)](https://github.com/Hercilio1), [Peter Sorensen (@psorensen)](https://github.com/psorensen), [Dave Adams (@tictag)](https://github.com/tictag), [Cormac Nicholson (@metashield-ie)](https://github.com/metashield-ie), [Konstantinos Galanakis (@kmgalanakis)](https://github.com/kmgalanakis), [(@liz1kiweno)](https://github.com/liz1kiweno), [Carlos G. (@cguidog)](https://github.com/cguidog), [Drazen Bebic (@drazenbebic)](https://github.com/drazenbebic), [Kirtan Gajjar (@kirtangajjar)](https://github.com/kirtangajjar), [Sudip Dadhaniya (@sudip-md)](https://github.com/sudip-md), [Ankit K Gupta (@ankitguptaindia)](https://github.com/ankitguptaindia), [Alex Concha (@xknown)](https://github.com/xknown), [Manoj Siddoji (@manojsiddoji)](https://github.com/manojsiddoji), [Gabriel Glogoški (@gabriel-glo)](https://github.com/gabriel-glo), [Jeremy Moore (@jeremymoore)](https://github.com/jeremymoore), [Tyler Bailey (@TylerB24890)](https://github.com/TylerB24890), [Rolf Siebers (@rolf-yoast)](https://github.com/rolf-yoast), [Colin Swinney (@colinswinney)](https://github.com/colinswinney), [Marcin Panniak (@martinpl)](https://github.com/martinpl), [Pyetro (@subfighter3)](https://github.com/subfighter3), [Romain Allard (@gigatyrant)](https://github.com/gigatyrant). +[Daryll Doyle (@darylldoyle)](https://github.com/darylldoyle), [Lewis Cowles (@LewisCowles1986)](https://github.com/LewisCowles1986), [Daniel M. Hendricks (@dmhendricks)](https://github.com/dmhendricks), [Dan Pock (@mallardduck)](https://github.com/mallardduck), [K. Adam White (@kadamwhite)](https://github.com/kadamwhite), [Joe Hoyle (@joehoyle)](https://github.com/joehoyle), [Jeffrey Paul (@jeffpaul)](https://github.com/jeffpaul), [Brandon Berg (@BBerg10up)](https://github.com/BBerg10up), [Max Lyuchin (@cadic)](https://github.com/cadic), [Mehidi Hassan (@mehidi258)](https://github.com/mehidi258), [Dharmesh Patel (@iamdharmesh)](https://github.com/iamdharmesh), [Timothy Decker (@amdd-tim)](https://github.com/amdd-tim), [Brooke Campbell](https://www.linkedin.com/in/brookecampbelldesign/), [Mehul Kaklotar (@mehulkaklotar)](https://github.com/mehulkaklotar), [@smerriman](https://github.com/smerriman), [Darin Kotter (@dkotter)](https://github.com/dkotter), [Manuel Friedli (@fritteli)](https://github.com/fritteli), [David Hamann (@davidhamann)](https://github.com/davidhamann), [@j-hoffmann](https://github.com/j-hoffmann), [Peter Wilson (@peterwilsoncc)](https://github.com/peterwilsoncc), [Torsten Landsiedel (@Zodiac1978)](https://github.com/Zodiac1978), [Axel DUCORON (@aksld)](https://github.com/aksld), [Mario Rader (@r8r)](https://github.com/r8r), [Jeremy Turowetz (@jerturowetz)](https://github.com/jerturowetz), [Robert O'Rourke (@roborourke)](https://github.com/roborourke), [Dominik Schilling (@ocean90)](https://github.com/ocean90), [Adam Wills (@AdamWills)](https://github.com/AdamWills), [Faisal Alvi (@faisal-alvi)](https://github.com/faisal-alvi), [Siddharth Thevaril (@Sidsector9)](https://github.com/Sidsector9), [Cory Hughart (@cr0ybot)](https://github.com/cr0ybot), [Cory Birdsong (@cbirdsong)](https://github.com/cbirdsong), [Vikram Moparthy (@vikrampm1)](https://github.com/vikrampm1), [Garth Gutenberg (@ggutenberg)](https://github.com/ggutenberg), [Jayedul Kabir (@jayedul)](https://github.com/jayedul), [Marcel Freinbichler (@freinbichler)](https://github.com/freinbichler), [IanDelMar (@IanDelMar)](https://github.com/IanDelMar), [Ravinder Kumar (@ravinderk)](https://github.com/ravinderk), [GitHub Dependabot (@dependabot)](https://github.com/apps/dependabot), [Santiago Dimattia (@sdmtt)](https://github.com/sdmtt), [Ben Marshall (@bmarshall511)](https://github.com/bmarshall511), [Viktor Szépe (@szepeviktor)](https://github.com/szepeviktor), [Dhanendran Rajagopal (@dhanendran)](https://github.com/dhanendran), [Curtis Loisel (@csloisel)](https://github.com/csloisel), [Giorgos Sarigiannidis (@gsarig)](https://github.com/gsarig), [Fabian Kägy (@fabiankaegy)](https://github.com/fabiankaegy), [Quamruz Zaman (@zamanq)](https://github.com/zamanq), [Sumit Bagthariya (@qasumitbagthariya)](https://github.com/qasumitbagthariya), [Toby Schrapel (@tobeycodes)](https://github.com/tobeycodes), [Shazahan Kabir Saju (@sksaju)](https://github.com/sksaju), [Chris Abraham (@cjyabraham)](https://github.com/cjyabraham), [Hercilio Martins Ortiz (@Hercilio1)](https://github.com/Hercilio1), [Peter Sorensen (@psorensen)](https://github.com/psorensen), [Dave Adams (@tictag)](https://github.com/tictag), [Cormac Nicholson (@metashield-ie)](https://github.com/metashield-ie), [Konstantinos Galanakis (@kmgalanakis)](https://github.com/kmgalanakis), [(@liz1kiweno)](https://github.com/liz1kiweno), [Carlos G. (@cguidog)](https://github.com/cguidog), [Drazen Bebic (@drazenbebic)](https://github.com/drazenbebic), [Kirtan Gajjar (@kirtangajjar)](https://github.com/kirtangajjar), [Sudip Dadhaniya (@sudip-md)](https://github.com/sudip-md), [Ankit K Gupta (@ankitguptaindia)](https://github.com/ankitguptaindia), [Alex Concha (@xknown)](https://github.com/xknown), [Manoj Siddoji (@manojsiddoji)](https://github.com/manojsiddoji), [Gabriel Glogoški (@gabriel-glo)](https://github.com/gabriel-glo), [Jeremy Moore (@jeremymoore)](https://github.com/jeremymoore), [Tyler Bailey (@TylerB24890)](https://github.com/TylerB24890), [Rolf Siebers (@rolf-yoast)](https://github.com/rolf-yoast), [Colin Swinney (@colinswinney)](https://github.com/colinswinney), [Marcin Panniak (@martinpl)](https://github.com/martinpl), [Pyetro Tarsitano (@subfighter3)](https://github.com/subfighter3), [Romain Allard (@gigatyrant)](https://github.com/gigatyrant). ## Libraries From 05fd0850aaed1204f23cddcd73e872a62aa0a38c Mon Sep 17 00:00:00 2001 From: Jeffrey Paul Date: Thu, 5 Dec 2024 10:03:27 -0600 Subject: [PATCH 8/8] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d746ab2..323198f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -392,6 +392,7 @@ All notable changes to this project will be documented in this file, per [the Ke - Initial Release. [Unreleased]: https://github.com/10up/safe-svg/compare/trunk...develop +[2.3.1]: https://github.com/10up/safe-svg/compare/2.3.0...2.3.1 [2.3.0]: https://github.com/10up/safe-svg/compare/2.2.6...2.3.0 [2.2.6]: https://github.com/10up/safe-svg/compare/2.2.5...2.2.6 [2.2.5]: https://github.com/10up/safe-svg/compare/2.2.4...2.2.5