kbrown / rpms / libreoffice

Forked from rpms/libreoffice 2 years ago
Clone

Blame SOURCES/0001-keep-pyuno-script-processing-below-base-uri.patch

91334d
From 14c85889616de301e3a214c49fff2e6da3327d1f Mon Sep 17 00:00:00 2001
91334d
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
91334d
Date: Thu, 18 Oct 2018 20:39:23 +0100
91334d
Subject: [PATCH] keep pyuno script processing below base uri
91334d
MIME-Version: 1.0
91334d
Content-Type: text/plain; charset=UTF-8
91334d
Content-Transfer-Encoding: 8bit
91334d
91334d
Change-Id: Icc13fb7193fb1e7c50e0df286161a10b4ed636c7
91334d
Reviewed-on: https://gerrit.libreoffice.org/61970
91334d
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
91334d
Reviewed-by: Thorsten Behrens <Thorsten.Behrens@CIB.de>
91334d
Reviewed-by: Michael Stahl <Michael.Stahl@cib.de>
91334d
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
91334d
Tested-by: Caolán McNamara <caolanm@redhat.com>
91334d
---
91334d
 scripting/source/pyprov/pythonscript.py | 30 +++++++++++++++++++++++--
91334d
 1 file changed, 28 insertions(+), 2 deletions(-)
91334d
91334d
diff --git a/scripting/source/pyprov/pythonscript.py b/scripting/source/pyprov/pythonscript.py
91334d
index 4803d0bebc23..f5aa2173333a 100644
91334d
--- a/scripting/source/pyprov/pythonscript.py
91334d
+++ b/scripting/source/pyprov/pythonscript.py
91334d
@@ -25,6 +25,7 @@ import imp
91334d
 import time
91334d
 import ast
91334d
 import platform
91334d
+from com.sun.star.uri.RelativeUriExcessParentSegments import RETAIN
91334d
 
91334d
 try:
91334d
     unicode
91334d
@@ -212,8 +213,33 @@ class MyUriHelper:
91334d
 
91334d
     def scriptURI2StorageUri( self, scriptURI ):
91334d
         try:
91334d
-            myUri = self.m_uriRefFac.parse(scriptURI)
91334d
-            ret = self.m_baseUri + "/" + myUri.getName().replace( "|", "/" )
91334d
+            # base path to the python script location
91334d
+            sBaseUri = self.m_baseUri + "/"
91334d
+            xBaseUri = self.m_uriRefFac.parse(sBaseUri)
91334d
+
91334d
+            # path to the .py file + "$functionname, arguments, etc
91334d
+            xStorageUri = self.m_uriRefFac.parse(scriptURI)
91334d
+            sStorageUri = xStorageUri.getName().replace( "|", "/" );
91334d
+
91334d
+            # path to the .py file, relative to the base
91334d
+            sFileUri = sStorageUri[0:sStorageUri.find("$")]
91334d
+            xFileUri = self.m_uriRefFac.parse(sFileUri)
91334d
+            if not xFileUri:
91334d
+                message = "pythonscript: invalid relative uri '" + sFileUri+ "'"
91334d
+                log.debug( message )
91334d
+                raise RuntimeException( message )
91334d
+
91334d
+            # absolute path to the .py file
91334d
+            xAbsScriptUri = self.m_uriRefFac.makeAbsolute(xBaseUri, xFileUri, True, RETAIN)
91334d
+            sAbsScriptUri = xAbsScriptUri.getUriReference()
91334d
+
91334d
+            # ensure py file is under the base path
91334d
+            if not sAbsScriptUri.startswith(sBaseUri):
91334d
+                message = "pythonscript: storage uri '" + sAbsScriptUri + "' not in base uri '" + self.m_baseUri + "'"
91334d
+                log.debug( message )
91334d
+                raise RuntimeException( message )
91334d
+
91334d
+            ret = sBaseUri + sStorageUri
91334d
             log.debug( "converting scriptURI="+scriptURI + " to storageURI=" + ret )
91334d
             return ret
91334d
         except UnoException as e:
91334d
-- 
91334d
2.20.1
91334d