Uploaded image for project: 'Commons BCEL'
  1. Commons BCEL
  2. BCEL-121

Calculation in LocalVariableTable.getLocalVariable is incorrect

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Minor
    • Resolution: Fixed
    • 6.8.1
    • None
    • Main
    • None
    • Operating System: Mac OS X 10.4
      Platform: Macintosh

    Description

      The calculation in LocalVariableTable.getLocalVariable is incorrect:

      public final LocalVariable getLocalVariable( int index, int pc ) {
      for (int i = 0; i < local_variable_table_length; i++) {
      if (local_variable_table[i].getIndex() == index) {
      int start_pc = local_variable_table[i].getStartPC();
      int end_pc = start_pc + local_variable_table[i].getLength();
      if ((pc >= start_pc) && (pc < end_pc))

      { return local_variable_table[i]; }

      }
      }
      return null;
      }

      From the VM spec:

      "The given local variable must have a value at indices into the code array in the interval [start_pc, start_pc+length], that is, between start_pc and start_pc+length inclusive. The value of start_pc must be a valid index into the code array of this Code attribute and must be the index of the opcode of an instruction. Either the value of start_pc+length must be a valid index into the code array of this Code attribute and be the index of the opcode of an instruction, or it must be the first index beyond the end of that code array."

      The check should be pc <= end_pc, not pc < end_pc.

      This problem exists both in HEAD and in older versions.

      I've attached a patch.

      Attachments

        1. patch.txt
          0.9 kB
          William Pugh

        Activity

          People

            issues@commons.apache.org Apache Commons Developers
            pugh@cs.umd.edu William Pugh
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: