You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Elliot Shank (JIRA)" <ji...@apache.org> on 2014/04/03 17:28:14 UTC

[jira] [Created] (NET-532) NPE in nntp.Threader.thread() when all messages in a derived thread are missing.

Elliot Shank created NET-532:
--------------------------------

             Summary: NPE in nntp.Threader.thread() when all messages  in a derived thread are missing.
                 Key: NET-532
                 URL: https://issues.apache.org/jira/browse/NET-532
             Project: Commons Net
          Issue Type: Bug
          Components: NNTP
    Affects Versions: 3.3, 3.0
            Reporter: Elliot Shank


I'm threading emails using the References: header. When I've got an incomplete set of messages (in this specific case, it's from one of the C++ standards committee lists) such that I'm missing an entire thread, I get exceptions like this:

Exception in thread "main" java.lang.NullPointerException
     at org.apache.commons.net.nntp.Threader.gatherSubjects(Threader.java:342)
     at org.apache.commons.net.nntp.Threader.thread(Threader.java:81)
     at org.apache.commons.net.nntp.Threader.thread(Threader.java:47)

What happens is that the graph returned by findRootSet() at line 71 will look something like

     ...
     <ThreadContainer A with Threadable>
         ...
     <ThreadContainer B without Threadable>
         <ThreadContainer ... without Threadable>
             <ThreadContainer ... without Threadable>
             <ThreadContainer ... without Threadable>
         <ThreadContainer ... without Threadable>
             <ThreadContainer ... without Threadable>
                 <ThreadContainer ... without Threadable>
     <ThreadContainer C with Threadable>
         ...
     ...

And, after pruneEmptyContainers() has had its way with things on line 75, the graph will be

     ...
     <ThreadContainer A with Threadable>
         ...
     <ThreadContainer B without Threadable>
     <ThreadContainer C with Threadable>
         ...
     ...

when it should be

     ...
     <ThreadContainer A with Threadable>
         ...
     <ThreadContainer C with Threadable>
         ...
     ...

I.e., ThreadContainer B should be eliminated entirely.

As it is, with ThreadContainer B present, but not containing any children or a Threadable, gatherSubjects() chokes.



--
This message was sent by Atlassian JIRA
(v6.2#6252)