BugRat Report # 152

Project: Tomcat Release: 3.2b4
Category: Bug Report SubCategory: New Bug Report
Class: swbug State: received
Priority: high Severity: critical
Confidence: public

Submitter: _Anonymous ( anonymous-bug@cortexity.com )
Date Submitted: Sep 21 2000, 08:13:18 CDT
Responsible: Z_Tomcat Alias ( tomcat-bugs@cortexity.com )

Synopsis:
Infinite loop in PrefixManager.java
Environment: (jvm, os, osrel, platform)
1.2.2, HP-UX, 11.04, HP

Additional Environment Description:
HP 9000/871/D270 dual CPU HP-UX 11.04 with JDK 1.2.2_04 (Hotspot enabled) TomCat 3.2 Beta 4

Report Description:
While running some tests with TomCat, I uncovered an infinite loop in PrefixManager.java. The routine getLongestPrefixMatch has the following chunk of code: while (s.length() >= 0) { //if(debug>8) context.log( "Prefix: " + s ); container = myMap.prefixMappedServlets.get(s); if (container == null) { s=URLUtil.removeLast( s ); } else { if( myMap.mapCacheEnabled ) { // XXX implement LRU or another replacement alghoritm myMap.mapCache.put( path, container ); } return container; } } return container; } The problem is that if myMap.prefixMappedServlet.get(s) never finds a container, the code goes into an infinite loop: I changed the while statement to: while (s.length() > 0) { and at least it exited and threw an execption. This situation occurred when I had a servlet mapped to a URL /myurl but then used a custom application going through a proxy server that changed the url: https://www.xxx.com/myurl to http://www.xxx.com:443/myurl

View this report online...