You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@logging.apache.org by "ASF GitHub Bot (JIRA)" <ji...@apache.org> on 2019/07/04 10:35:00 UTC

[jira] [Work logged] (LOG4J2-2650) ArrayIndexOutOfBoundsException in the initialization of UuidUtil

     [ https://issues.apache.org/jira/browse/LOG4J2-2650?focusedWorklogId=272114&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-272114 ]

ASF GitHub Bot logged work on LOG4J2-2650:
------------------------------------------

                Author: ASF GitHub Bot
            Created on: 04/Jul/19 10:34
            Start Date: 04/Jul/19 10:34
    Worklog Time Spent: 10m 
      Work Description: mattiabertorello commented on pull request #290: [LOG4J2-2650] Fix ArrayIndexOutOfBoundsException swhen the mac variable was an ipv6
URL: https://github.com/apache/logging-log4j2/pull/290
 
 
   
 
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Issue Time Tracking
-------------------

            Worklog Id:     (was: 272114)
            Time Spent: 10m
    Remaining Estimate: 0h

> ArrayIndexOutOfBoundsException in the initialization of UuidUtil
> ----------------------------------------------------------------
>
>                 Key: LOG4J2-2650
>                 URL: https://issues.apache.org/jira/browse/LOG4J2-2650
>             Project: Log4j 2
>          Issue Type: Bug
>          Components: Core
>    Affects Versions: 2.12.0
>         Environment: os : Mac OS
> java: 1.8 (jdk1.8.0_172.jdk)
> none network interfaces connected
>            Reporter: Mattia Bertorello
>            Priority: Major
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> Hi, 
> I found a problem in the UuidUtil initialization.
> The code that generate the exception
> {code:java}
>   private static Logger log = LogManager.getLogger(MyClass.class);
> {code}
> This code return a ip address of localhost and when the stack is IPv4 return 4 bytes but when the default stack is IPv6 it's going to return 16 bytes.
>   [NetUtils.java#L108|https://github.com/apache/logging-log4j2/blob/da539329d528d979f4dd385a6ebb639793ef37bd/log4j-core/src/main/java/org/apache/logging/log4j/core/util/NetUtils.java#L108]
> {code:java}
> if (mac == null || mac.length == 0) { 
>    mac = localHost.getAddress(); 
> }
> {code}
> This is the part that generate the ArrayIndexOutOfBoundsException
>  [UuidUtil.java#L81|https://github.com/apache/logging-log4j2/blob/da539329d528d979f4dd385a6ebb639793ef37bd/log4j-core/src/main/java/org/apache/logging/log4j/core/util/UuidUtil.java#L81]
> {code:java}
> System.arraycopy(mac, index, node, index + 2, length);{code}
> These 16 bytes will generate a wrong destination index that exceed the length of the node array.
> {noformat}
> mac = {byte[16]@3217} 
> length = 6 
> index = 10 
> node = {byte[8]@3222}
> {noformat}
> This is the complete exception  
> {code}
> java.lang.ExceptionInInitializerError at org.apache.logging.log4j.core.util.WatchManager.<init>(WatchManager.java:53) at org.apache.logging.log4j.core.config.AbstractConfiguration.<init>(AbstractConfiguration.java:135) at org.apache.logging.log4j.core.config.NullConfiguration.<init>(NullConfiguration.java:32) at org.apache.logging.log4j.core.LoggerContext.<clinit>(LoggerContext.java:79) at org.apache.logging.log4j.core.selector.ClassLoaderContextSelector.createContext(ClassLoaderContextSelector.java:171) at org.apache.logging.log4j.core.selector.ClassLoaderContextSelector.locateContext(ClassLoaderContextSelector.java:145) at org.apache.logging.log4j.core.selector.ClassLoaderContextSelector.getContext(ClassLoaderContextSelector.java:70) at org.apache.logging.log4j.core.selector.ClassLoaderContextSelector.getContext(ClassLoaderContextSelector.java:57) at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:148) at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:45) at org.apache.logging.log4j.LogManager.getContext(LogManager.java:194) at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:581) at cc.arduino.contributions.packages.ContributionInstaller.<clinit>(ContributionInstaller.java:66) at processing.app.Base.<init>(Base.java:291) at processing.app.Base.main(Base.java:150) Caused by: java.lang.ArrayIndexOutOfBoundsException at java.lang.System.arraycopy(Native Method) at org.apache.logging.log4j.core.util.UuidUtil.<clinit>(UuidUtil.java:81) ... 15 more
> {code}
> To reproduce the exception you need
>  * disconnect every network interface
>  * verify that java will use the IPv6 stack -Djava.net.preferIPv4Stack=false -Djava.net.preferIPv6Addresses=true
>  * Initialize a log of log4j
> I suggest different solution:
>  - Remove  [NetUtils.java#L108|https://github.com/apache/logging-log4j2/blob/da539329d528d979f4dd385a6ebb639793ef37bd/log4j-core/src/main/java/org/apache/logging/log4j/core/util/NetUtils.java#L108] and return always null (when the other code fail to init the mac variable ) because in general the method is called getMacAddress but in that particular case will return and IP address 
>  - Mange the IPv6 case in the static part of the class UuidUtil [UuidUtil.java#L81|https://github.com/apache/logging-log4j2/blob/da539329d528d979f4dd385a6ebb639793ef37bd/log4j-core/src/main/java/org/apache/logging/log4j/core/util/UuidUtil.java#L81]



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)