[jcifs] Bug in jcifs.netbios.NameServiceClient

Steve Herndon sherndon at stillsecure.com
Thu Jan 6 22:37:37 GMT 2005


Here is the diff:

$ diff -c jcifs_1.1.6/src/jcifs/netbios/NameServiceClient.java 
jcifs_1.1.6_patched/src/jcifs/netbios/NameServiceClient.java
*** jcifs_1.1.6/src/jcifs/netbios/NameServiceClient.java        
2004-12-27 18:44:16.000000000 -0700
--- jcifs_1.1.6_patched/src/jcifs/netbios/NameServiceClient.java        
2005-01-06 10:56:51.328403064 -0700
***************
*** 174,211 ****
      }
      public void run() {
          int nameTrnId;
!         NameServicePacket response;

!         while( thread == Thread.currentThread() ) {
!             in.setLength( RCV_BUF_SIZE );
!             try {
                  socket.setSoTimeout( closeTimeout );
                  socket.receive( in );
!             } catch( IOException ioe ) {
!                 tryClose();
!                 break;
!             }
!
!             if( log.level > 3 )
!                 log.println( "NetBIOS: new data read from socket" );
!
!             nameTrnId = NameServicePacket.readNameTrnId( rcv_buf, 0 );
!             response = (NameServicePacket)responseTable.get( new 
Integer( nameTrnId ));
!             if( response == null || response.received ) {
!                 continue;
!             }
!             synchronized( response ) {
!                 response.readWireFormat( rcv_buf, 0 );
!                 response.received = true;
!
!                 if( log.level > 3 ) {
!                     log.println( response );
!                     Hexdump.hexdump( log, rcv_buf, 0, in.getLength() );
                  }
-
-                 response.notify();
              }
          }
      }
      void send( NameServicePacket request, NameServicePacket response,
                                              int timeout ) throws 
IOException {
--- 174,219 ----
      }
      public void run() {
          int nameTrnId;
!         NameServicePacket response = null;

!         try {
!             while( thread == Thread.currentThread() ) {
!                 in.setLength( RCV_BUF_SIZE );
                  socket.setSoTimeout( closeTimeout );
                  socket.receive( in );
!
!                 if( log.level > 3 )
!                     log.println( "NetBIOS: new data read from socket" );
!
!                 nameTrnId = NameServicePacket.readNameTrnId( rcv_buf, 0 );
!                 response = (NameServicePacket)responseTable.get( new 
Integer( nameTrnId ));
!                 if( response == null || response.received ) {
!                     continue;
!                 }
!                 synchronized( response ) {
!                     try {
!                         response.readWireFormat( rcv_buf, 0 );
!                     }
!                     catch (NegativeArraySizeException ex) {
!                         // Malformed packet. Ignore it
!                         continue;
!                     }
!                     response.received = true;
!
!                     if( log.level > 2 ) {
!                         log.println( response );
!                         Hexdump.hexdump( log, rcv_buf, 0, 
in.getLength() );
!                     }
!
!                     response.notify();
                  }
              }
          }
+         catch (Throwable t) {
+         }
+         finally {
+             tryClose();
+         }
      }
      void send( NameServicePacket request, NameServicePacket response,
                                              int timeout ) throws 
IOException {


steve

Michael B Allen wrote:

>Steve Herndon said:
>  
>
>>I have found and fixed a bug in the jcifs.netbios.NameServiceClient
>>class where the thread was dying but not getting restarted. I found this
>>problem while using jcifs on a network with a large number of clients
>>(>2000). How do I submit my patch for inclusion into the jcifs repository?
>>    
>>
>
>Just post it.
>
>Mike
>  
>

-- 
Steve Herndon




More information about the jcifs mailing list