Author: cbegin
Date: Sat Dec  5 23:10:05 2009
New Revision: 887607

URL: http://svn.apache.org/viewvc?rev=887607&view=rev
Log:
ibatis 695 Problem when using ${param}. Works only for object parameters not 
for basic types

Modified:
    
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/dynamic/TextSqlNode.java
    
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/cglib_lazy_error/CglibNPETest.java
    
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/cglib_lazy_error/Person.xml
    
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/cglib_lazy_error/PersonMapper.java

Modified: 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/dynamic/TextSqlNode.java
URL: 
http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/dynamic/TextSqlNode.java?rev=887607&r1=887606&r2=887607&view=diff
==============================================================================
--- 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/dynamic/TextSqlNode.java
 (original)
+++ 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/dynamic/TextSqlNode.java
 Sat Dec  5 23:10:05 2009
@@ -4,6 +4,7 @@
 import org.apache.ibatis.ognl.Ognl;
 import org.apache.ibatis.ognl.OgnlException;
 import org.apache.ibatis.parsing.GenericTokenParser;
+import org.apache.ibatis.type.SimpleTypeRegistry;
 
 public class TextSqlNode implements SqlNode {
   private String text;
@@ -28,6 +29,12 @@
 
     public String handleToken(String content) {
       try {
+        Object parameter = context.getBindings().get("_parameter");
+        if (parameter == null) {
+          context.getBindings().put("value", null);
+        } else if (SimpleTypeRegistry.isSimpleType(parameter.getClass())) {
+          context.getBindings().put("value", parameter);
+        }
         Object value = Ognl.getValue(content, context.getBindings());
         return String.valueOf(value);
       } catch (OgnlException e) {

Modified: 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/cglib_lazy_error/CglibNPETest.java
URL: 
http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/cglib_lazy_error/CglibNPETest.java?rev=887607&r1=887606&r2=887607&view=diff
==============================================================================
--- 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/cglib_lazy_error/CglibNPETest.java
 (original)
+++ 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/cglib_lazy_error/CglibNPETest.java
 Sat Dec  5 23:10:05 2009
@@ -122,4 +122,17 @@
     }
   }
 
+  @Test
+  public void testSelectWithStringSQLInjection() {
+    SqlSession sqlSession = sqlSessionFactory.openSession();
+    try {
+      PersonMapper personMapper = sqlSession.getMapper(PersonMapper.class);
+      Person selected1 = personMapper.selectByStringId("1");
+      Assert.assertEquals(1,selected1.getId());
+
+    } finally {
+      sqlSession.close();
+    }
+  }
+
 }

Modified: 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/cglib_lazy_error/Person.xml
URL: 
http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/cglib_lazy_error/Person.xml?rev=887607&r1=887606&r2=887607&view=diff
==============================================================================
--- 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/cglib_lazy_error/Person.xml
 (original)
+++ 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/cglib_lazy_error/Person.xml
 Sat Dec  5 23:10:05 2009
@@ -27,6 +27,12 @@
         WHERE id = #{id,jdbcType=INTEGER}
     </select>
 
+    <select id="selectByStringId" resultMap="personMap" parameterType="String">
+        SELECT <include refid="columns"/>
+        FROM Person
+        WHERE id = ${value}
+    </select>
+
     <insert id="insertPerson">
       INSERT INTO person (id, firstName, lastName, parent)
       VALUES (#{id}, #{firstName}, #{lastName}, null);

Modified: 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/cglib_lazy_error/PersonMapper.java
URL: 
http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/cglib_lazy_error/PersonMapper.java?rev=887607&r1=887606&r2=887607&view=diff
==============================================================================
--- 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/cglib_lazy_error/PersonMapper.java
 (original)
+++ 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/cglib_lazy_error/PersonMapper.java
 Sat Dec  5 23:10:05 2009
@@ -3,6 +3,7 @@
 public interface PersonMapper {
     
     public Person selectById(int id);
+    public Person selectByStringId(String id);
     public int insertPerson (Person person);
 
 }


Reply via email to