@InjectPage annotation can leak page instances from one locale to another
-------------------------------------------------------------------------

                 Key: TAP5-1585
                 URL: https://issues.apache.org/jira/browse/TAP5-1585
             Project: Tapestry 5
          Issue Type: Bug
          Components: tapestry-core
    Affects Versions: 5.3, 5.2
            Reporter: Howard M. Lewis Ship


Noticed this code:

    private final class InjectedPageConduit extends ReadOnlyFieldValueConduit
    {
        private final String injectedPageName;

        private Object page;

        private InjectedPageConduit(ComponentResources resources, String 
fieldName,
                                    String injectedPageName)
        {
            super(resources, fieldName);

            this.injectedPageName = injectedPageName;

            resources.addPageLifecycleListener(new PageLifecycleAdapter()
            {
                @Override
                public void containingPageDidDetach()
                {
                    page = null;
                }
            });
        }

        public Object get(Object instance, InstanceContext context)
        {
            if (page == null)
                page = componentSource.getPage(injectedPageName);

            return page;
        }

Basically, what we have here is a field per instance storing the page ... this 
should go in a PerThreadValue.  As currently coded, there will be windows where 
a page in one locale will have a page in some other locale injected into it 
since the single field is injected across locale (and, in 5.3, 
ComponentResourceSelector axis').

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to