diff --git a/geonode/geoserver/helpers.py b/geonode/geoserver/helpers.py
index ba235b0dce6..bee9a103fdc 100755
--- a/geonode/geoserver/helpers.py
+++ b/geonode/geoserver/helpers.py
@@ -238,7 +238,7 @@ def extract_name_from_sld(gs_catalog, sld, sld_file=None):
sld = sld_file.read()
if isinstance(sld, str):
sld = sld.encode('utf-8')
- dom = etree.XML(sld)
+ dom = etree.XML(sld, parser=etree.XMLParser(resolve_entities=False))
elif sld_file and isfile(sld_file):
with open(sld_file, "rb") as sld_file:
sld = sld_file.read()
@@ -378,7 +378,7 @@ def set_dataset_style(saved_dataset, title, sld, base_file=None):
elif isinstance(sld, str):
sld = sld.strip('b\'\n')
sld = re.sub(r'(\\r)|(\\n)', '', sld).encode("UTF-8")
- etree.XML(sld)
+ etree.XML(sld, parser=etree.XMLParser(resolve_entities=False))
elif base_file and isfile(base_file):
with open(base_file, "rb") as sld_file:
sld = sld_file.read()
diff --git a/geonode/geoserver/tests/test_helpers.py b/geonode/geoserver/tests/test_helpers.py
index bd49c202700..228324f9b79 100644
--- a/geonode/geoserver/tests/test_helpers.py
+++ b/geonode/geoserver/tests/test_helpers.py
@@ -28,7 +28,10 @@
from geonode.decorators import on_ogc_backend
from geonode.tests.base import GeoNodeBaseTestSupport
from geonode.geoserver.views import _response_callback
-from geonode.geoserver.helpers import get_dataset_storetype
+from geonode.geoserver.helpers import (
+ gs_catalog,
+ get_dataset_storetype,
+ extract_name_from_sld)
from geonode.layers.populate_datasets_data import create_dataset_data
from geonode.geoserver.ows import (
@@ -71,6 +74,19 @@ def setUp(self):
self.passwd = 'admin'
create_dataset_data()
+ @on_ogc_backend(geoserver.BACKEND_PACKAGE)
+ def test_extract_name_from_sld(self):
+ content = """
+ ]>
+
+
+
+ &ent;
+
+
+"""
+ self.assertIsNone(extract_name_from_sld(gs_catalog, content))
+
@on_ogc_backend(geoserver.BACKEND_PACKAGE)
def test_replace_callback(self):
content = f"""
diff --git a/geonode/geoserver/views.py b/geonode/geoserver/views.py
index 4be9b87619f..642dcf0a956 100644
--- a/geonode/geoserver/views.py
+++ b/geonode/geoserver/views.py
@@ -179,7 +179,7 @@ def respond(*args, **kw):
if isfile(sld):
with open(sld) as sld_file:
sld = sld_file.read()
- etree.XML(sld)
+ etree.XML(sld, parser=etree.XMLParser(resolve_entities=False))
except Exception:
logger.exception("The uploaded SLD file is not valid XML")
raise Exception(
@@ -799,7 +799,7 @@ def get_capabilities(request, layerid=None, user=None,
}
gc_str = tpl.render(ctx)
gc_str = gc_str.encode("utf-8", "replace")
- layerelem = etree.XML(gc_str)
+ layerelem = etree.XML(gc_str, parser=etree.XMLParser(resolve_entities=False))
rootdoc = etree.ElementTree(layerelem)
except Exception as e:
import traceback