From 37b8219a03827e45d24a890bf9fe8dd39b40e1f9 Mon Sep 17 00:00:00 2001 From: Manthan Surkar Date: Tue, 14 Jul 2020 03:52:09 +0530 Subject: [PATCH] FINERACT-1006 Fixes: NullPointerException at SQLInjectionValidator --- .../infrastructure/security/utils/ColumnValidator.java | 4 ++++ .../security/utils/SQLInjectionValidator.java | 7 +++++++ 2 files changed, 11 insertions(+) diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/utils/ColumnValidator.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/utils/ColumnValidator.java index 18a563b47..18d833a95 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/utils/ColumnValidator.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/utils/ColumnValidator.java @@ -29,6 +29,7 @@ import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; +import org.apache.commons.lang3.StringUtils; import org.apache.fineract.infrastructure.core.service.RoutingDataSource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -91,6 +92,9 @@ public class ColumnValidator { public void validateSqlInjection(String schema, String... conditions) { for (String condition : conditions) { + if (StringUtils.isBlank(condition)) { + continue; + } SQLInjectionValidator.validateSQLInput(condition); List operator = new ArrayList<>(Arrays.asList("=", ">", "<", "> =", "< =", "! =", "!=", ">=", "<=")); condition = condition.trim().replace("( ", "(").replace(" )", ")").toLowerCase(); diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/utils/SQLInjectionValidator.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/utils/SQLInjectionValidator.java index 60ff8e367..ce0c85d78 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/utils/SQLInjectionValidator.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/utils/SQLInjectionValidator.java @@ -21,6 +21,7 @@ package org.apache.fineract.infrastructure.security.utils; import java.util.StringTokenizer; import java.util.regex.Matcher; import java.util.regex.Pattern; +import org.apache.commons.lang3.StringUtils; public class SQLInjectionValidator { @@ -33,6 +34,9 @@ public class SQLInjectionValidator { private static final String SQL_PATTERN = "[a-zA-Z_=,\\-'!><.?\"`% ()0-9*\n\r]*"; public static final void validateSQLInput(final String sqlSearch) { + if (StringUtils.isBlank(sqlSearch)) { + return; + } String lowerCaseSQL = sqlSearch.toLowerCase(); for (String ddl : DDL_COMMANDS) { if (lowerCaseSQL.contains(ddl)) { @@ -118,6 +122,9 @@ public class SQLInjectionValidator { } public static final void validateAdhocQuery(final String sqlSearch) { + if (StringUtils.isBlank(sqlSearch)) { + return; + } String lowerCaseSQL = sqlSearch.toLowerCase().trim(); for (String ddl : DDL_COMMANDS) { if (lowerCaseSQL.startsWith(ddl)) {