NNTPClient has problems with group listings for large groups.
-------------------------------------------------------------

                 Key: NET-276
                 URL: https://issues.apache.org/jira/browse/NET-276
             Project: Commons Net
          Issue Type: Bug
    Affects Versions: 2.0
            Reporter: Erik


The following command causes a MalformedServerReplyException on my usenet 
server (astraweb):
client.listNewsgroups();

Root Cause:
Caused by: org.apache.commons.net.MalformedServerReplyException: 
alt.binaries.boneless 2230918506 1662764743 y
        at 
org.apache.commons.net.nntp.NNTPClient.__readNewsgroupListing(NNTPClient.java:255)
        at 
org.apache.commons.net.nntp.NNTPClient.listNewsgroups(NNTPClient.java:930)
        at 
org.lievaart.jleecher.protocol.CommandFactory$2.doOnServer(CommandFactory.java:27)
        at 
org.lievaart.jleecher.protocol.NNTPProtocol.callServer(NNTPProtocol.java:33)
        ... 2 more

My hypothesis is that NNTP cannot parse the response, because one of the 
numbers exceeds the Integer range.
Locally I have applied the following quick fix to get it to work:

public class NNTPClient extends NNTP {
...
...
...
        private NewsgroupInfo __parseNewsgroupListEntry(final String entry) {
                NewsgroupInfo result;
                StringTokenizer tokenizer;
                int lastNum, firstNum;
                String last, first, permission;

                result = new NewsgroupInfo();
                tokenizer = new StringTokenizer(entry);

                if (tokenizer.countTokens() < 4) {
                        return null;
                }

                result._setNewsgroup(tokenizer.nextToken());
                last = tokenizer.nextToken();
                first = tokenizer.nextToken();
                permission = tokenizer.nextToken();


                try {
                        try {
                                lastNum = Integer.parseInt(last);
                        } catch (NumberFormatException nfe) {
                                if (last.matches("\\d++")) {
                                        lastNum = Integer.MAX_VALUE;
                                } else {
                                        throw nfe;
                                }
                        }


-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to