[ 
https://issues.apache.org/jira/browse/ARTEMIS-4734?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Justin Bertram updated ARTEMIS-4734:
------------------------------------
    Description: 
{{repliToken}} can be 0.

In 
{{org.apache.activemq.artemis.core.replication.ReplicationManager#sendReplicatePacket(org.apache.activemq.artemis.core.protocol.core.Packet,
 boolean, org.apache.activemq.artemis.utils.ReusableLatch)}} the {{repliToken}} 
is initialized with the value returned by ([line 
464|https://github.com/apache/activemq-artemis/blob/main/artemis-server/src/main/java/org/apache/activemq/artemis/core/replication/ReplicationManager.java])
 {{OperationContextImpl.getContext(ioExecutorFactory)}}, i.e.:
{code:java}
final OperationContext repliToken = 
OperationContextImpl.getContext(ioExecutorFactory);{code}
Inside this method, a call is made to 
{{OperationContextImpl.threadLocalContext.get()}}([line 
61|https://github.com/apache/activemq-artemis/blob/main/artemis-server/src/main/java/org/apache/activemq/artemis/core/persistence/impl/journal/OperationContextImpl.java]),
 which returns the value from the thread that was set earlier. If no value was 
set in the stream, then token will be {{null}}.
{code:java}
OperationContext token = OperationContextImpl.threadLocalContext.get();{code}
If {{ioExecutorFactory}} is {{null}} and there is no value set in the thread, 
then the {{repliToken}} will remain {{null}} because the backing 
{{getContext()}} method also returns {{null}} in this case.

 So {{repliToken}} can be 0 if {{ioExecutorFactory}} is {{null}} and there is 
no value set in the thread.

Found by Linux Verification Center (portal.linuxtesting.ru) with SVACE.
Author Alexey Galkin.

 

 

  was:
repliToken can be 0.

In this code, the repliToken is initialized with the value returned by the 
method ([line 
464|https://github.com/apache/activemq-artemis/blob/main/artemis-server/src/main/java/org/apache/activemq/artemis/core/replication/ReplicationManager.java])
 OperationContextImpl.getContext(ioExecutorFactory)

final OperationContext repliToken = 
OperationContextImpl.getContext(ioExecutorFactory);

Inside this method, a call is made to the 
OperationContextImpl.threadLocalContext.get()([line 
61|https://github.com/apache/activemq-artemis/blob/main/artemis-server/src/main/java/org/apache/activemq/artemis/core/persistence/impl/journal/OperationContextImpl.java])
 method, which returns the value from the thread that was set earlier. If no 
value was set in the stream, then token will be null.

OperationContext token = OperationContextImpl.threadLocalContext.get();


If ioExecutorFactory is null and there is no value set in the thread, then the 
repliToken will remain null because the backing getContext() method also 
returns null in this case.

 So repliToken can be 0 if ioExecutorFactory is null and there is no value set 
in the thread.

Found by Linux Verification Center (portal.linuxtesting.ru) with SVACE.
Author Alexey Galkin.

 

 


> Null dereferencing in ReplicationManager.java
> ---------------------------------------------
>
>                 Key: ARTEMIS-4734
>                 URL: https://issues.apache.org/jira/browse/ARTEMIS-4734
>             Project: ActiveMQ Artemis
>          Issue Type: Bug
>            Reporter: Galkin Alexey
>            Priority: Major
>
> {{repliToken}} can be 0.
> In 
> {{org.apache.activemq.artemis.core.replication.ReplicationManager#sendReplicatePacket(org.apache.activemq.artemis.core.protocol.core.Packet,
>  boolean, org.apache.activemq.artemis.utils.ReusableLatch)}} the 
> {{repliToken}} is initialized with the value returned by ([line 
> 464|https://github.com/apache/activemq-artemis/blob/main/artemis-server/src/main/java/org/apache/activemq/artemis/core/replication/ReplicationManager.java])
>  {{OperationContextImpl.getContext(ioExecutorFactory)}}, i.e.:
> {code:java}
> final OperationContext repliToken = 
> OperationContextImpl.getContext(ioExecutorFactory);{code}
> Inside this method, a call is made to 
> {{OperationContextImpl.threadLocalContext.get()}}([line 
> 61|https://github.com/apache/activemq-artemis/blob/main/artemis-server/src/main/java/org/apache/activemq/artemis/core/persistence/impl/journal/OperationContextImpl.java]),
>  which returns the value from the thread that was set earlier. If no value 
> was set in the stream, then token will be {{null}}.
> {code:java}
> OperationContext token = OperationContextImpl.threadLocalContext.get();{code}
> If {{ioExecutorFactory}} is {{null}} and there is no value set in the thread, 
> then the {{repliToken}} will remain {{null}} because the backing 
> {{getContext()}} method also returns {{null}} in this case.
>  So {{repliToken}} can be 0 if {{ioExecutorFactory}} is {{null}} and there is 
> no value set in the thread.
> Found by Linux Verification Center (portal.linuxtesting.ru) with SVACE.
> Author Alexey Galkin.
>  
>  



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to