[ 
https://issues.apache.org/jira/browse/GROOVY-11126?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17745035#comment-17745035
 ] 

Eric Milles edited comment on GROOVY-11126 at 7/20/23 11:34 AM:
----------------------------------------------------------------

Do we have any idea what "org.codehaus.groovy.runtime.dgm$1323" looks like?

I'm wondering if the switch to "dgm$1323.doInvokeMethod(string,new Object[0])" 
has the safe check in the wrong position.

This script throws NPE as described:
{code:groovy}
def test(String string) {
  string?.size()
}
10000.times {
  test('1')
  test('')
}
test()
{code}


was (Author: emilles):
Do we have any idea what "org.codehaus.groovy.runtime.dgm$1323" looks like?

> Null-safe Dereference fails after time
> --------------------------------------
>
>                 Key: GROOVY-11126
>                 URL: https://issues.apache.org/jira/browse/GROOVY-11126
>             Project: Groovy
>          Issue Type: Bug
>          Components: bytecode
>    Affects Versions: 4.0.11, 4.0.12
>         Environment: Zulu Java 17.0.7, Amazon Linux 2023, Spring Boot 3.1.1
>            Reporter: Kenneth W DeLong
>            Priority: Critical
>         Attachments: javapOutput.txt, javapOutput2.txt
>
>
> I have a server-side app that works perfectly for a long time (18-24h) then 
> suddenly starts throwing "impossible" errors.
> {code:java}
> Caused by: java.lang.NullPointerException: Cannot invoke 
> "java.lang.CharSequence.length()" because "self" is null     
>         at 
> org.codehaus.groovy.runtime.StringGroovyMethods.size(StringGroovyMethods.java:2693)
>         at org.codehaus.groovy.runtime.dgm$1323.doMethodInvoke(Unknown Source)
>       at 
> com.hatchbaby.model.ColorParser.isOneByteFormat(ColorParser.groovy:74)
>       at com.hatchbaby.model.ColorParser.getRed(ColorParser.groovy:13)
>       at com.hatchbaby.domain.Content.getRed(Content.groovy:173)
>  {code}
> The line of code at ColorParser:74 is:
> {code:java}
> int size = color?.size() ?: 0 {code}
> The variable `color` is a String. The null-safe dereference operator has 
> ceased to short-circuit.
> This code is years old and has run flawlessly. Since the upgrade from Spring 
> Boot 2.7.4 to Boot 3.1.1, it runs fine for 18-24h, then it starts throwing 
> NullPointerExceptions.  This is happening at a couple of other places in the 
> code, all on null-safe dereferences that don't short-circuit. The above code 
> is hit 9,000+ times/day. We have a cluster of servers and they seem to 
> develop the problem within a couple hours of each other.
> The server is running with Spring Boot 3.1.1 (hence Groovy 4.0.12) running on 
> Java 17.0.7 (Azul Zulu) on Amazon Linux 2023. The project is joint Java and 
> Groovy code that is compiled with the GMavenPlus 3.0.0 Maven plugin (maven 
> 3.9.1)
> I have tried to reproduce the error by running a tiny program that mimics the 
> error, but so far after running 1.4 million invocations over 24h with no 
> errors (as you might expect).



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

Reply via email to