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 <[email protected]>
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_