[
https://issues.apache.org/jira/browse/NET-532?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Elliot Shank updated NET-532:
-----------------------------
Description:
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:
{noformat}
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)
{noformat}
What happens is that the graph returned by findRootSet() at line 71 will look
something like
{noformat}
...
<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>
...
...
{noformat}
And, after pruneEmptyContainers() has had its way with things on line 75, the
graph will be
{noformat}
...
<ThreadContainer A with Threadable>
...
<ThreadContainer B without Threadable>
<ThreadContainer C with Threadable>
...
...
{noformat}
when it should be
{noformat}
...
<ThreadContainer A with Threadable>
...
<ThreadContainer C with Threadable>
...
...
{noformat}
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.
was:
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.
> 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.0, 3.3
> Reporter: Elliot Shank
> Attachments: threader.patch
>
>
> 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:
> {noformat}
> 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)
> {noformat}
> What happens is that the graph returned by findRootSet() at line 71 will look
> something like
> {noformat}
> ...
> <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>
> ...
> ...
> {noformat}
> And, after pruneEmptyContainers() has had its way with things on line 75, the
> graph will be
> {noformat}
> ...
> <ThreadContainer A with Threadable>
> ...
> <ThreadContainer B without Threadable>
> <ThreadContainer C with Threadable>
> ...
> ...
> {noformat}
> when it should be
> {noformat}
> ...
> <ThreadContainer A with Threadable>
> ...
> <ThreadContainer C with Threadable>
> ...
> ...
> {noformat}
> 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)