Uploaded image for project: 'Byteman'
  1. Byteman
  2. BYTEMAN-375

Unsatisfiable local variable binding $this

    XMLWordPrintable

Details

    • Bug
    • Resolution: Won't Do
    • Blocker
    • None
    • 4.0.4, 4.0.5
    • Trigger Injection
    • None

    Description

      I have the following Byteman rule that instruments the ClassLoader class:

      RULE OpenTracing SpecialAgent ClassLoader Injection
      
      CLASS ^java.lang.ClassLoader
      
      METHOD Class findClass(String)
      BIND
        cls:byte[] = io.opentracing.contrib.specialagent.Agent.findClass($this, $1);
      IF cls != null
      DO
        traceln(">>>>>>>> defineClass(" + $1 + ")");
        RETURN $this.defineClass($1, cls, 0, cls.length, null);
      ENDRULE
      

      When run in a jvm9+ runtime, I get the following in the verbose logs:

      retransforming java.net.URLClassLoader
      retransforming jdk.internal.loader.Loader
      retransforming jdk.internal.loader.BuiltinClassLoader
      org.jboss.byteman.agent.Transformer : possible trigger for rule OpenTracing SpecialAgent ClassLoader Injection in class java.net.URLClassLoader
      RuleTriggerMethodAdapter.injectTriggerPoint : inserting trigger into java.net.URLClassLoader.findClass(java.lang.String) java.lang.Class for rule OpenTracing SpecialAgent ClassLoader Injection
      org.jboss.byteman.agent.Transformer : inserted trigger for OpenTracing SpecialAgent ClassLoader Injection in class java.net.URLClassLoader
      org.jboss.byteman.agent.Transformer : possible trigger for rule OpenTracing SpecialAgent ClassLoader Injection in class jdk.internal.loader.Loader
      RuleTriggerMethodAdapter.injectTriggerPoint : inserting trigger into jdk.internal.loader.Loader.findClass(java.lang.String) java.lang.Class for rule OpenTracing SpecialAgent ClassLoader Injection
      org.jboss.byteman.agent.Transformer : inserted trigger for OpenTracing SpecialAgent ClassLoader Injection in class jdk.internal.loader.Loader
      org.jboss.byteman.agent.Transformer : possible trigger for rule OpenTracing SpecialAgent ClassLoader Injection in class jdk.internal.loader.BuiltinClassLoader
      RuleTriggerMethodAdapter.injectTriggerPoint : inserting trigger into jdk.internal.loader.BuiltinClassLoader.findClass(java.lang.String) java.lang.Class for rule OpenTracing SpecialAgent ClassLoader Injection
      org.jboss.byteman.agent.Transformer : inserted trigger for OpenTracing SpecialAgent ClassLoader Injection in class jdk.internal.loader.BuiltinClassLoader
      install rule OpenTracing SpecialAgent ClassLoader Injection
      install rule OkHttp3 install tracing interceptor (Load Classes)
      install rule OkHttp3 install tracing interceptor

      However, when run in jvm1.7 or jvm1.8, I get the following in the verbose logs:

      retransforming java.net.URLClassLoader
      RuleCheckMethodAdapter.checkBindings : unsatisfiable local variable binding $this checking method findClass(Ljava/lang/String;)Ljava/lang/Class;
      org.jboss.byteman.agent.Transformer : possible trigger for rule OpenTracing SpecialAgent ClassLoader Injection in class java.net.URLClassLoader
      org.jboss.byteman.agent.Transformer : inserted trigger for OpenTracing SpecialAgent ClassLoader Injection in class java.net.URLClassLoader
      install rule OpenTracing SpecialAgent ClassLoader Injection
      install rule OkHttp3 install tracing interceptor (Load Classes)
      install rule OkHttp3 install tracing interceptor

      The rule executes properly in jvm9+, but does not in jvm1.7 or jvm1.8.

      I attempted to change $this to $0, but as expected, it's the same error. As far as I understand, it seems to me that the rule is fully legit, and should pass all type and binding checks. Am I missing something?

      Attachments

        Activity

          People

            rhn-engineering-adinn Andrew Dinn
            safris Seva Safris (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: