This is an automated email from the ASF dual-hosted git repository. bodewig pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/ant-ivy.git
The following commit(s) were added to refs/heads/master by this push: new 5d69c9a5 IVY-1647 better check whether properties/features can be set 5d69c9a5 is described below commit 5d69c9a5447d32780e5c11f65a44b853647abdf4 Author: Stefan Bodewig <bode...@apache.org> AuthorDate: Fri Sep 15 17:26:32 2023 +0200 IVY-1647 better check whether properties/features can be set --- asciidoc/release-notes.adoc | 6 ++-- src/java/org/apache/ivy/util/XMLHelper.java | 56 +++++++++++++++++++++++++++-- version.properties | 4 +-- 3 files changed, 59 insertions(+), 7 deletions(-) diff --git a/asciidoc/release-notes.adoc b/asciidoc/release-notes.adoc index 7de155a1..782e75df 100644 --- a/asciidoc/release-notes.adoc +++ b/asciidoc/release-notes.adoc @@ -19,7 +19,7 @@ = Ivy Release Announcement -XXXX Date XXXX - The Apache Ivy project is pleased to announce its 2.6.0 release. +XXXX Date XXXX - The Apache Ivy project is pleased to announce its 2.5.3 release. == What is Ivy? Apache Ivy is a tool for managing (recording, tracking, resolving and reporting) project dependencies, characterized by flexibility, @@ -34,7 +34,7 @@ More information about the project can be found on the website link:https://ant. == Key features in this release -Key features of this 2.6.0 release are: +Key features of this 2.5.3 release are: == List of Changes in this Release @@ -42,6 +42,8 @@ For details about the following changes, check our JIRA install at link:https:// *List of changes since Ivy 2.5.2:* +- FIX: trying to set safe XML features causes SAXExceptions when used with certain XML parsers (jira:IVY-1647[]) + //// Samples : - NEW: bla bla bla (jira:IVY-1234[]) (Thanks to Jane Doe) diff --git a/src/java/org/apache/ivy/util/XMLHelper.java b/src/java/org/apache/ivy/util/XMLHelper.java index e5bfa7be..9fc740ac 100644 --- a/src/java/org/apache/ivy/util/XMLHelper.java +++ b/src/java/org/apache/ivy/util/XMLHelper.java @@ -88,9 +88,11 @@ public abstract class XMLHelper { } } final XMLReader reader = parser.getXMLReader(); - reader.setFeature(XML_NAMESPACE_PREFIXES, true); - reader.setProperty(XML_ACCESS_EXTERNAL_SCHEMA, externalResources.getAllowedProtocols()); - reader.setProperty(XML_ACCESS_EXTERNAL_DTD, externalResources.getAllowedProtocols()); + trySetFeature(reader, XML_NAMESPACE_PREFIXES, true); + trySetProperty(reader, XML_ACCESS_EXTERNAL_SCHEMA, + externalResources.getAllowedProtocols()); + trySetProperty(reader, XML_ACCESS_EXTERNAL_DTD, + externalResources.getAllowedProtocols()); return parser; } @@ -425,6 +427,15 @@ public abstract class XMLHelper { } } + private static boolean isFeatureSupported(final XMLReader reader, final String feature) { + try { + reader.getFeature(feature); + return true; + } catch (SAXException e) { + return false; + } + } + private static boolean isAttributeSupported(final TransformerFactory factory, final String attribute) { try { factory.getAttribute(attribute); @@ -434,6 +445,15 @@ public abstract class XMLHelper { } } + private static boolean isPropertySupported(final XMLReader reader, final String property) { + try { + reader.getProperty(property); + return true; + } catch (SAXException e) { + return false; + } + } + private static boolean trySetFeature(final DocumentBuilderFactory factory, final String feature, final boolean val) { if (!isFeatureSupported(factory, feature)) { @@ -472,6 +492,21 @@ public abstract class XMLHelper { } } + private static boolean trySetFeature(final XMLReader reader, + final String feature, final boolean val) { + if (!isFeatureSupported(reader, feature)) { + return false; + } + try { + reader.setFeature(feature, val); + return true; + } catch (SAXException e) { + // log and continue + Message.warn("Failed to set feature " + feature + " on XMLReader", e); + return false; + } + } + private static boolean trySetAttribute(final TransformerFactory factory, final String attribute, final String val) { if (!isAttributeSupported(factory, attribute)) { @@ -487,6 +522,21 @@ public abstract class XMLHelper { } } + private static boolean trySetProperty(final XMLReader reader, + final String property, final Object val) { + if (!isPropertySupported(reader, property)) { + return false; + } + try { + reader.setProperty(property, val); + return true; + } catch (SAXException e) { + // log and continue + Message.warn("Failed to set property " + property + " on XMLReader", e); + return false; + } + } + private static final InputSource EMPTY_INPUT_SOURCE = new InputSource(new StringReader("")); private static class NoopEntityResolver implements EntityResolver { diff --git a/version.properties b/version.properties index 57a04932..e1f78213 100644 --- a/version.properties +++ b/version.properties @@ -16,9 +16,9 @@ # * specific language governing permissions and limitations # * under the License. # *************************************************************** -target.ivy.version=2.6.0 +target.ivy.version=2.5.3 # Following OSGi spec: have to be 3 numbers separated by dots -target.ivy.bundle.version=2.6.0 +target.ivy.bundle.version=2.5.3 # in case we want to add a qualifier such as alpha, beta, etc... # if non empty, add a '_' at the end of the qualifier, so the version would look like 1.2.3.alpha_200901011200 # NB: be careful with naming, OSGi orders version alphabetically. Suggested values: alpha_, beta_, cr1_ (for RC-1), final_