Details

    • Type: Bug Bug
    • Status: Resolved
    • Priority: Minor Minor
    • Resolution: Fixed
    • Affects Version/s: 1.5, 1.6, 1.6.1
    • Fix Version/s: 1.6.2, 1.7, 2.x
    • Component/s: None
    • Labels:
      None

      Description

      Hi devs,
      when we upgrade to velocity1.6.1. But the process failed. we found a
      critical bug in velocity1.6.1 . I have mock the bug in details:

      First step:

      public interface ITestBean2{

      String getName();
      }

      public interface ITestBean extends ITestBean2 {

      }

      private static class TestBean implements ITestBean {
      private String name = "test bean method name";
      public String getName()

      { return name; }

      }

      then set up velocity excute template code:

      context.put("testBean", new TestBean());
      System.out.println(evaluate("$testBean.getName()"));

      We found $testBean.getName() can not be rendered.The template can be
      rendered in version1.4. Then I debug several hours(I never read velocity
      code before), we found a bug in class
      org.apache.velocity.util.introspection.ClassMap::createMethodCache() . Code
      "classToReflect.getInterfaces() " is not correct used, Class.getInterfaces()
      Can ONLY get parent interfaces, it can not get a super super interface.
      So Code "createMethodCache()" missed a interface check.

      Leon Liu
      ================================================
      private MethodCache createMethodCache()
      {
      MethodCache methodCache = new MethodCache(log);
      for (Class classToReflect = getCachedClass(); classToReflect != null
      ; classToReflect = classToReflect.getSuperclass())
      {
      if (Modifier.isPublic(classToReflect.getModifiers()))

      { populateMethodCacheWith(methodCache, classToReflect); }

      Class [] interfaces = classToReflect.getInterfaces();
      for (int i = 0; i < interfaces.length; i++)
      {
      if (Modifier.isPublic(interfaces[i].getModifiers()))

      { populateMethodCacheWith(methodCache, interfaces[i]); }

      }
      }
      return methodCache;
      }

        Issue Links

          Activity

          No work has yet been logged on this issue.

            People

            • Assignee:
              Unassigned
              Reporter:
              Nathan Bubna
            • Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved:

                Development