powered by Jive Software

Smack 4.4.0 A corrupted roster entry file in RosterStore causes ParserUtils to throw an unhandled IllegalArgumentException

For unknown reason, it was found that one of the roster entry files of the aTalk user account in the RosterStore has empty content. This causes smack ParserUtils to throw an IllegalArgumentException.
However this IllegalArgumentException is not handled within smack nor pass on to upper app to take action. Because of this, aTalk user account login failed; but there is no error message displays to user for action.

Any proposal on how to resolve this kind of problem i.e. corrupted roster entry file?
I just manually deleted this corrupted file and aTalk returns to normal operation on next launch.

=========== aTalk debug log ============
2020-12-27 14:25:24.647 19777-20832/org.atalk.android E/AndroidRuntime: FATAL EXCEPTION: Smack Cached Executor
    Process: org.atalk.android, PID: 19777
    java.lang.IllegalArgumentException: Document contains no start tag
        at org.jivesoftware.smack.util.ParserUtils.forwardToStartElement(ParserUtils.java:72)
        at org.jivesoftware.smack.util.PacketParserUtils.getParserFor(PacketParserUtils.java:85)
        at org.jivesoftware.smack.roster.rosterstore.DirectoryRosterStore.readEntry(DirectoryRosterStore.java:194)
        at org.jivesoftware.smack.roster.rosterstore.DirectoryRosterStore.getEntries(DirectoryRosterStore.java:120)
        at org.jivesoftware.smack.roster.Roster$RosterResultListener.onSuccess(Roster.java:1739)
        at org.jivesoftware.smack.roster.Roster$RosterResultListener.onSuccess(Roster.java:1687)
        at org.jivesoftware.smack.SmackFuture$1.run(SmackFuture.java:178)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:919)
2020-12-27 14:25:24.653 19777-20832/org.atalk.android W/aTalk: [207538] org.jivesoftware.smack.AbstractXMPPConnection.uncaughtException() Thread[Smack Cached Executor,5,main] encountered uncaught exception
    java.lang.IllegalArgumentException: Document contains no start tag
        at org.jivesoftware.smack.util.ParserUtils.forwardToStartElement(ParserUtils.java:72)
        at org.jivesoftware.smack.util.PacketParserUtils.getParserFor(PacketParserUtils.java:85)
        at org.jivesoftware.smack.roster.rosterstore.DirectoryRosterStore.readEntry(DirectoryRosterStore.java:194)
        at org.jivesoftware.smack.roster.rosterstore.DirectoryRosterStore.getEntries(DirectoryRosterStore.java:120)
        at org.jivesoftware.smack.roster.Roster$RosterResultListener.onSuccess(Roster.java:1739)
        at org.jivesoftware.smack.roster.Roster$RosterResultListener.onSuccess(Roster.java:1687)
        at org.jivesoftware.smack.SmackFuture$1.run(SmackFuture.java:178)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:919)

I guess we should at least add IllegalArgumentException to the catch list of

I think this should already help in your case.

I have created SMACK-897.