Hi,

My name is Jing Xu. I am a student from University of Texas at Arlington, United States. 

I am developing a software testing tool to detect thread stress vulnerability of server application. And our tool detects the vulnerability on your openchat in following main function:


public static void main(String a[]) throws Exception {

  loadProps();

  printProps();

  int port=Integer.parseInt(getProperty("CHAT_SERVER_PORT"));

  if (a.length > 0)   port=Integer.parseInt(a[0]);

  for (int i=0; i < Integer.parseInt(getProperty("CHAT_SERVER_WORKERS")); i++) {

    Worker w=new Worker();

    (new Thread(w,"worker #" + i)).start();

    threads.addElement(w);

  }

  try {

    ServerSocket ss=new ServerSocket(port);

    do {

      java.net.Socket s=ss.accept();

      Worker w=null;

synchronized (threads) {

        if (threads.isEmpty()) {

          Worker ws=new Worker();

          ws.setSocket(s);

          (new Thread(ws,"additional worker")).start();

        }

 else {

          w=(Worker)threads.elementAt(0);

          threads.removeElementAt(0);

          w.setSocket(s);

        }

      }

    }

 while (true);

  }

 catch (  BindException e) {

    p("Could not open the ServerSocket. Propably the address (port:" + port + ") is already in use.");

  }

  System.exit(1);

}

Is it possible that worker will be created with unbounded times? Thanks advanced for your help.

Best,
Jing