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] [Updated] (ARTEMIS-1636) Coverity: Null pointer dereferences
(FORWARD_NULL) in JournalStorageManager.java
[ https://issues.apache.org/jira/browse/ARTEMIS-1636?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Jiri Daněk updated ARTEMIS-1636:
--------------------------------
External issue URL: https://scan7.coverity.com/reports.htm#v25199/p14213/fileInstanceId=46407695&defectInstanceId=9747152&mergedDefectId=1464350
External issue ID: 1464350
> 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
> Priority: Major
>
> 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)