details:   https://code.openbravo.com/erp/devel/pi/rev/ef34142891ad
changeset: 33500:ef34142891ad
user:      Javier Armendáriz <javier.armendariz <at> openbravo.com>
date:      Wed Feb 21 10:52:41 2018 +0100
summary:   Related to issue 37740: Fixed potential issues

- Inserting a null value for both error-code and exception-type could lead to a 
crash at startup.
- Error codes are validated
- Fixed formatting

diffstat:

 src-wad/src/org/openbravo/wad/Wad.java      |  45 +++++++++++++++++++---------
 src-wad/src/org/openbravo/wad/Wad_data.xsql |   5 +-
 src-wad/src/org/openbravo/wad/webConf.xml   |   4 +-
 3 files changed, 35 insertions(+), 19 deletions(-)

diffs (131 lines):

diff -r 61c59ba769d5 -r ef34142891ad src-wad/src/org/openbravo/wad/Wad.java
--- a/src-wad/src/org/openbravo/wad/Wad.java    Tue Feb 20 13:39:26 2018 +0100
+++ b/src-wad/src/org/openbravo/wad/Wad.java    Wed Feb 21 10:52:41 2018 +0100
@@ -11,7 +11,7 @@
  * under the License. 
  * The Original Code is Openbravo ERP. 
  * The Initial Developer of the Original Code is Openbravo SLU 
- * All portions are Copyright (C) 2001-2017 Openbravo SLU 
+ * All portions are Copyright (C) 2001-2018 Openbravo SLU 
  * All Rights Reserved. 
  * Contributor(s):  ______________________________________.
  ************************************************************************
@@ -772,12 +772,14 @@
       xmlDocument.setData("structure2", WadData.selectMapping(pool));
 
       String baseDesignFolder = getBaseDesignFolder(contextParams);
-      xmlDocument.setData("structureErrorExceptionPage",
-          appendErrorPageRoutePrefix(WadData.selectErrorPages(pool, 
EXCEPTION_TYPE_PAGES), baseDesignFolder));
+      xmlDocument.setData(
+          "structureErrorExceptionPage",
+          prepareErrorPageData(WadData.selectErrorPages(pool, 
EXCEPTION_TYPE_PAGES),
+              baseDesignFolder));
       xmlDocument.setData("structureErrorCodePage",
-          appendErrorPageRoutePrefix(WadData.selectErrorPages(pool, 
ERROR_CODE_PAGES), baseDesignFolder));
+          prepareErrorPageData(WadData.selectErrorPages(pool, 
ERROR_CODE_PAGES), baseDesignFolder));
       xmlDocument.setData("structureGenericErrorPage",
-          appendErrorPageRoutePrefix(WadData.selectGenericErrorPages(pool), 
baseDesignFolder));
+          prepareErrorPageData(WadData.selectGenericErrorPages(pool), 
baseDesignFolder));
 
       String webXml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + 
xmlDocument.print();
       webXml = webXml.replace("${attachPath}", attachPath);
@@ -792,28 +794,41 @@
   private String getBaseDesignFolder(WadData[] contextParams) {
     String baseDesignPath = findParameterByName("BaseDesignPath", 
contextParams);
     String defaultDesignPath = findParameterByName("DefaultDesignPath", 
contextParams);
-    
+
     return String.format("/%s/%s", baseDesignPath, defaultDesignPath);
   }
-  
-  private WadData[] appendErrorPageRoutePrefix(WadData[] originalData, String 
baseDesignFolder) {
-    List<WadData> appendedData = new ArrayList<WadData>();
+
+  private WadData[] prepareErrorPageData(WadData[] originalData, String 
baseDesignFolder) {
+    List<WadData> appendedData = new ArrayList<>();
     for (WadData data : originalData) {
+      if (!validateErrorCode(data.errortype, data.value)) {
+        log4j.warn("Error page " + data.name + " has invalid error code: " + 
data.value);
+        continue;
+      }
       if (data.location != null && !data.location.isEmpty()) {
-        data.location = String
-            .format("%s/%s", baseDesignFolder, data.location);
+        data.location = String.format("%s/%s", baseDesignFolder, 
data.location);
         appendedData.add(data);
-        
         log4j.debug("Processed error page " + data.name);
-      }
-      else {
-        log4j.warn("Error page " + data.name +" has no location");
+      } else {
+        log4j.warn("Error page " + data.name + " has no location");
       }
     }
 
     return appendedData.toArray(new WadData[appendedData.size()]);
   }
 
+  private boolean validateErrorCode(String errorType, String errorCode) {
+    if (ERROR_CODE_PAGES.equals(errorType)) {
+      try {
+        Integer.parseInt(errorCode);
+      } catch (NumberFormatException nfe) {
+        return false;
+      }
+    }
+
+    return true;
+  }
+
   private String findParameterByName(String name, WadData[] contextParams) {
     for (WadData param : contextParams) {
       if (param.name.equals(name)) {
diff -r 61c59ba769d5 -r ef34142891ad src-wad/src/org/openbravo/wad/Wad_data.xsql
--- a/src-wad/src/org/openbravo/wad/Wad_data.xsql       Tue Feb 20 13:39:26 
2018 +0100
+++ b/src-wad/src/org/openbravo/wad/Wad_data.xsql       Wed Feb 21 10:52:41 
2018 +0100
@@ -244,7 +244,7 @@
     <SqlMethodComment>Select the active generic Error pages (with no code or 
exception parameters)</SqlMethodComment>
     <Sql>
       <![CDATA[
-      select coalesce(o.name, o.ad_model_object_id) as name, p.value as 
location
+      select coalesce(o.name, o.ad_model_object_id) as name, p.value as 
location, 'generic' as errortype
       from  ad_model_object_para p, 
             ad_model_object o
       where o.object_type = 'E'
@@ -266,7 +266,7 @@
     <SqlMethodComment>Select the active error pages of the type given (it can 
be either exception-type or error code)</SqlMethodComment>
     <Sql>
       <![CDATA[
-      select coalesce(o.name, o.ad_model_object_id) as name, p.value as 
errortype, 
+      select coalesce(o.name, o.ad_model_object_id) as name, p.value as value, 
p.name as errortype,
         (select max(value)
          from ad_model_object_para lp 
          where lp.ad_model_object_id = o.ad_model_object_id
@@ -279,6 +279,7 @@
       and p.isactive = 'Y'
       and p.ad_model_object_id = o.ad_model_object_id
       and p.name = ?
+      and p.value is not null
       ]]> 
     </Sql>
     <Parameter name="errorType"/>
diff -r 61c59ba769d5 -r ef34142891ad src-wad/src/org/openbravo/wad/webConf.xml
--- a/src-wad/src/org/openbravo/wad/webConf.xml Tue Feb 20 13:39:26 2018 +0100
+++ b/src-wad/src/org/openbravo/wad/webConf.xml Wed Feb 21 10:52:41 2018 +0100
@@ -94,13 +94,13 @@
 
   <structure name="structureErrorExceptionPage">
     <FIELD id="exceptionPageLocation">location</FIELD>
-    <FIELD id="exceptionType">errortype</FIELD>
+    <FIELD id="exceptionType">value</FIELD>
     <SECTION id="errorExceptionPage"/>
   </structure>
 
   <structure name="structureErrorCodePage">
     <FIELD id="errorCodePageLocation">location</FIELD>
-    <FIELD id="errorCode">errortype</FIELD>
+    <FIELD id="errorCode">value</FIELD>
     <SECTION id="errorCodePage"/>
   </structure>
 

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Openbravo-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openbravo-commits

Reply via email to