You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@activemq.apache.org by "Jiri Daněk (JIRA)" <ji...@apache.org> on 2018/01/24 17:15:00 UTC
[jira] [Created] (ARTEMIS-1636) Coverity: Null pointer dereferences
(FORWARD_NULL) in JournalStorageManager.java
Jiri Daněk created ARTEMIS-1636:
-----------------------------------
Summary: Coverity: Null pointer dereferences (FORWARD_NULL) in JournalStorageManager.java
Key: ARTEMIS-1636
URL: https://issues.apache.org/jira/browse/ARTEMIS-1636
Project: ActiveMQ Artemis
Issue Type: Bug
Components: Broker
Affects Versions: 2.5.0
Reporter: Jiri Daněk
There are multiple versions of the JournalStorageManager constructor.
The first overload is being called only from test code, as far as I can tell.
{noformat}
public JournalStorageManager(final Configuration config,
final CriticalAnalyzer analyzer,
final ExecutorFactory executorFactory,
final ScheduledExecutorService scheduledExecutorService,
final ExecutorFactory ioExecutors) {
this(config, analyzer, executorFactory, scheduledExecutorService, ioExecutors, null);
}
{noformat}
This second overload is being called also from {{XmlDataExporter#process}}
{noformat}
public JournalStorageManager(final Configuration config, CriticalAnalyzer analyzer, final ExecutorFactory executorFactory, final ExecutorFactory ioExecutors) {
this(config, analyzer, executorFactory, null, ioExecutors, null);
}
{noformat}
The problem with the second one is, according to Coverity
{noformat}
** CID 1464350: Null pointer dereferences (FORWARD_NULL)
________________________________________________________________________________________________________
*** CID 1464350: Null pointer dereferences (FORWARD_NULL)
/activemq-artemis/artemis-server/src/main/java/org/apache/activemq/artemis/core/persistence/impl/journal/JournalStorageManager.java: 97 in org.apache.activemq.artemis.core.persistence.impl.journal.JournalStorageManager.<init>(org.apache.activemq.artemis.core.config.Configuration, org.apache.activemq.artemis.utils.critical.CriticalAnalyzer, org.apache.activemq.artemis.utils.ExecutorFactory, org.apache.activemq.artemis.utils.ExecutorFactory)()
91 final ScheduledExecutorService scheduledExecutorService,
92 final ExecutorFactory ioExecutors) {
93 this(config, analyzer, executorFactory, scheduledExecutorService, ioExecutors, null);
94 }
95
96 public JournalStorageManager(final Configuration config, CriticalAnalyzer analyzer, final ExecutorFactory executorFactory, final ExecutorFactory ioExecutors) {
>>> CID 1464350: Null pointer dereferences (FORWARD_NULL)
>>> Passing "null" to "JournalStorageManager", which dereferences it.
97 this(config, analyzer, executorFactory, null, ioExecutors, null);
98 }
99
100 public JournalStorageManager(final Configuration config,
101 final CriticalAnalyzer analyzer,
102 final ExecutorFactory executorFactory,
{noformat}
because in {{AbstractJournalStorageManager.java}} constructor, this happens
{noformat}
1. deref_parm_in_call: Function init dereferences criticalErrorListener. (The virtual call resolves to org.apache.activemq.artemis.core.persistence.impl.journal.JDBCJournalStorageManager.init.) [show details]
226 init(config, criticalErrorListener);
{noformat}
and in the {{#init}} method
{noformat}
59 protected synchronized void init(Configuration config, IOCriticalErrorListener criticalErrorListener) {
60 try {
61 final DatabaseStorageConfiguration dbConf = (DatabaseStorageConfiguration) config.getStoreConfiguration();
62 final JDBCJournalImpl bindingsJournal;
63 final JDBCJournalImpl messageJournal;
64 final JDBCSequentialFileFactory largeMessagesFactory;
1. Condition dbConf.getDataSource() != null, taking true branch.
65 if (dbConf.getDataSource() != null) {
66 SQLProvider.Factory sqlProviderFactory = dbConf.getSqlProviderFactory();
2. Condition sqlProviderFactory == null, taking true branch.
67 if (sqlProviderFactory == null) {
68 sqlProviderFactory = new PropertySQLProvider.Factory(dbConf.getDataSource());
69 }
70 bindingsJournal = new JDBCJournalImpl(dbConf.getDataSource(), sqlProviderFactory.create(dbConf.getBindingsTableName(), SQLProvider.DatabaseStoreType.BINDINGS_JOURNAL), dbConf.getBindingsTableName(), scheduledExecutorService, executorFactory.getExecutor(), criticalErrorListener);
71 messageJournal = new JDBCJournalImpl(dbConf.getDataSource(), sqlProviderFactory.create(dbConf.getMessageTableName(), SQLProvider.DatabaseStoreType.MESSAGE_JOURNAL), dbConf.getMessageTableName(), scheduledExecutorService, executorFactory.getExecutor(), criticalErrorListener);
3. deref_parm_in_call: Function JDBCSequentialFileFactory dereferences criticalErrorListener. [show details]
72 largeMessagesFactory = new JDBCSequentialFileFactory(dbConf.getDataSource(), sqlProviderFactory.create(dbConf.getLargeMessageTableName(), SQLProvider.DatabaseStoreType.LARGE_MESSAGE), executorFactory.getExecutor(), criticalErrorListener);
73 } else {
{noformat}
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)