On 17/03/2015 14:45, Christopher Schultz wrote:
> Ping

Sorry. This dropped off my radar while I was trying to figure out the
APR crash.

I'll take a look later today.

Mark


> 
> On 3/9/15 12:19 PM, Christopher Schultz wrote:
>> All,
>>
>> I was looking at https://bz.apache.org/bugzilla/show_bug.cgi?id=57676 (a
>> simple proposed patch to improve an error message) and I was trying to
>> figure out what to do with a bit of code in addEndpoint. Reading the
>> code, I think I've spotted a problem:
>>
>> [187]   UriTemplate uriTemplate = new UriTemplate(path);
>>         if (uriTemplate.hasParameters()) {
>>             Integer key = Integer.valueOf(uriTemplate.getSegmentCount());
>>             SortedSet<TemplatePathMatch> templateMatches =
>>                     configTemplateMatchMap.get(key);
>>             if (templateMatches == null) {
>>                 // Ensure that if concurrent threads execute this block they
>>                 // both end up using the same TreeSet instance
>>                 templateMatches = new TreeSet<>(
>>                         TemplatePathMatchComparator.getInstance());
>>                 configTemplateMatchMap.putIfAbsent(key, templateMatches);
>>                 templateMatches = configTemplateMatchMap.get(key);
>>             }
>> [200]       if (!templateMatches.add(new TemplatePathMatch(sec,
>> uriTemplate))) {
>>                 // Duplicate uriTemplate;
>>                 throw new DeploymentException(
>>                         sm.getString("serverContainer.duplicatePaths", path,
>>                                      sec.getEndpointClass(),
>>                                      sec.getEndpointClass()));
>>             }
>>         }
>>
>> The problem is on line 200, where we check to see if
>> templateMatches.add() returns false (meaning that the object we added to
>> the set replaced one that was already there).
>>
>> I don't believe this branch can /ever/ be reached because the
>> TemplatePathMatch class doesn't override Object.equals(), thus no two
>> objects of that type will ever equal each other. Therefore, a new
>> TemplatePathMatch object will always be added to the set.
>>
>> I'm not sure what the implications are of multiple TemplatePathMatch
>> objects being in that set, but it looks like it's bad (we throw an
>> exception in that case), so someone with a better understanding of such
>> things might want to take a look.
>>
>> (Also, if anyone would care to comment on how to get the "pre-existing"
>> match for the error message -- which is different than current-trunk as
>> it's what I'm working on -- I'd love some insight.)
>>
>> Thanks,
>> -chris
>>
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to