You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openoffice.apache.org by ar...@apache.org on 2022/09/28 18:35:03 UTC

[openoffice] 03/03: Better filtering

This is an automated email from the ASF dual-hosted git repository.

ardovm pushed a commit to branch path
in repository https://gitbox.apache.org/repos/asf/openoffice.git

commit e99f7e8be481f00305f0deab6b6995ef317cb336
Author: Arrigo Marchiori <ar...@yahoo.it>
AuthorDate: Wed Sep 28 20:32:04 2022 +0200

    Better filtering
---
 .../plugins/sunmajor/pluginlib/sunjavaplugin.cxx   | 35 ++++++++++++++++++----
 1 file changed, 30 insertions(+), 5 deletions(-)

diff --git a/main/jvmfwk/plugins/sunmajor/pluginlib/sunjavaplugin.cxx b/main/jvmfwk/plugins/sunmajor/pluginlib/sunjavaplugin.cxx
index 402094b357..d8442f7fba 100644
--- a/main/jvmfwk/plugins/sunmajor/pluginlib/sunjavaplugin.cxx
+++ b/main/jvmfwk/plugins/sunmajor/pluginlib/sunjavaplugin.cxx
@@ -518,6 +518,10 @@ javaPluginError jfw_plugin_startJavaVirtualMachine(
     vecOptions.push_back(JavaVMOption());
     vecOptions.back().optionString = (char *) "abort";
     vecOptions.back().extraInfo = (void* )(sal_IntPtr)abort_handler;
+#if OSL_DEBUG_LEVEL >= 2
+        JFW_TRACE2(OString("VM option: ") + OString(vecOptions.back().optionString) +
+                   OString("\n"));
+#endif
     rtl::OString sClassPathProp("-Djava.class.path=");
     rtl::OString sClassPathOption;
     for (int i = 0; i < cOptions; i++)
@@ -525,21 +529,21 @@ javaPluginError jfw_plugin_startJavaVirtualMachine(
 #ifdef UNX
     // Until java 1.5 we need to put a plugin.jar or javaplugin.jar (<1.4.2)
     // in the class path in order to have applet support.
-        rtl::OString sClassPath = arOptions[i].optionString;
-        if (sClassPath.match(sClassPathProp, 0) == sal_True)
+        rtl::OString sOptionString = arOptions[i].optionString;
+        if (sOptionString.match(sClassPathProp, 0) == sal_True)
         {
-            bool emptyClassPath = (sClassPath == sClassPathProp);
+            bool emptyClassPath = (sOptionString == sClassPathProp);
             char sep[] =  {SAL_PATHSEPARATOR, 0};
             OString sAddPath = getPluginJarPath(pInfo->sVendor, pInfo->sLocation,pInfo->sVersion);
             if (sAddPath.getLength()) {
-                sClassPathOption = sClassPath;
+                sClassPathOption = sOptionString;
                 if (!emptyClassPath) {
                     sClassPathOption += rtl::OString(sep);
                 }
                 sClassPathOption += sAddPath;
                 emptyClassPath = false;
             } else
-                sClassPathOption = sClassPath;
+                sClassPathOption = sOptionString;
             if (!emptyClassPath) {
                 vecOptions.push_back(JavaVMOption());
                 vecOptions.back().optionString = (char *) sClassPathOption.getStr();
@@ -555,6 +559,27 @@ javaPluginError jfw_plugin_startJavaVirtualMachine(
 #ifdef UNX
         }
 #endif
+        sOptionString = vecOptions.back().optionString;
+        if (sOptionString.match(sClassPathProp, 0) == sal_True) {
+            // Check for empty entries in the class path
+            sal_Int32 nIndex = sClassPathProp.getLength();
+            rtl::OString sToken;
+            char empty1[] = {'.', 0};
+            char empty2[] = {'.', SAL_PATHDELIMITER, 0};
+            const rtl::OString sEmpty1 = rtl::OString(empty1);
+            const rtl::OString sEmpty2 = rtl::OString(empty2);
+            do {
+                sToken = sOptionString.getToken(0, SAL_PATHSEPARATOR, nIndex);
+                if ((sToken.getLength() == 0) ||
+                    (sToken == sEmpty1) ||
+                    (sToken == sEmpty2)) {
+                    fprintf(stderr,"[Java framework]sunjavaplugin"
+                            SAL_DLLEXTENSION
+                            " Rejecting empty class path entry !\n");
+                    return JFW_PLUGIN_E_INVALID_ARG;
+                }
+            } while (nIndex >= 0);
+        }
 #if OSL_DEBUG_LEVEL >= 2
         JFW_TRACE2(OString("VM option: ") + OString(vecOptions.back().optionString) +
                    OString("\n"));