From 60e27d9b92703528965c6cb7de557a402b22afb5 Mon Sep 17 00:00:00 2001 From: brinn <brinn> Date: Wed, 14 Nov 2012 15:21:53 +0000 Subject: [PATCH] [BIS-260] Fix SQL injections for custom queries Add some defensive checks for parameter resolution. SVN: 27624 --- .../systemsx/cisd/openbis/plugin/query/server/DAO.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/server/DAO.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/server/DAO.java index 794b8471496..3de612b9693 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/server/DAO.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/server/DAO.java @@ -223,7 +223,11 @@ class DAO extends SimpleJdbcDaoSupport implements IDAO for (Entry<String, String> entry : bindingsOrNull.getBindings().entrySet()) { template.bind(entry.getKey(), "?"); - indexMap.put(template.tryGetIndex(entry.getKey()), entry); + final int index = template.tryGetIndex(entry.getKey()); + if (index >= 0) + { + indexMap.put(index, entry); + } } } final PreparedStatement psm = con.prepareStatement(template.createText()); @@ -231,6 +235,10 @@ class DAO extends SimpleJdbcDaoSupport implements IDAO for (int i = 1; i <= pmd.getParameterCount(); ++i) { final Entry<String, String> entry = indexMap.get(i - 1); + if (entry == null) + { + throw new SQLDataException("No variable found for for parameter " + i); + } final String strValue = entry.getValue(); try { -- GitLab