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_

Reply via email to