Program: 75759
Project: 75759
Buggy source:
/** 
 * Fire this actor.  Optionally parse a received datagram into a token of arbitrary type.  Otherwise, assemble an integer array token by placing one byte of the datagram into each integer in the array.  Broadcast the converted token on the output port.
 * @exception IllegalActionException If the data cannot beconverted into a token of the same type as the configured type of the output port.
 */
public void fire() throws IllegalActionException {
  if (_debugging)   _debug("String_Node_Str");
synchronized (_syncFireAndThread) {
    if (((BooleanToken)(blockAwaitingDatagram.getToken())).booleanValue()) {
      while (packetsAlreadyAwaitingFire == 0) {
        try {
          _syncFireAndThread.wait();
        }
 catch (        InterruptedException ex) {
        }
      }
    }
 else {
    }
    if (packetsAlreadyAwaitingFire != 0) {
      boolean forParser=((BooleanToken)(decodeWithPtolemyParser.getToken())).booleanValue();
      if (forParser) {
        _length=_broadcastPacket.getLength();
        _dataStr=new String(_broadcastPacket.getData(),0,_length);
        _evalVar.setExpression(_dataStr);
        _outputToken=_evalVar.getToken();
      }
 else {
        int bytesAvailable=_broadcastPacket.getLength();
        Token[] dataIntTokens=new Token[bytesAvailable];
        byte[] dataBytes=_broadcastPacket.getData();
        for (int j=0; j < bytesAvailable; j++) {
          dataIntTokens[j]=new IntToken(dataBytes[j]);
        }
        _outputToken=new ArrayToken(dataIntTokens);
      }
      packetsAlreadyAwaitingFire--;
      _syncFireAndThread.notifyAll();
    }
 else {
      _outputToken=defaultOutput.getToken();
    }
    output.broadcast(_outputToken);
  }
}

Fixed version (ground truth):
/** 
 * Fire this actor.  Optionally parse a received datagram into a token of arbitrary type.  Otherwise, assemble an integer array token by placing one byte of the datagram into each integer in the array.  Broadcast the converted token on the output port.
 * @exception IllegalActionException If the data cannot beconverted into a token of the same type as the configured type of the output port.
 */
public void fire() throws IllegalActionException {
  if (false)   System.out.println(this + "String_Node_Str");
  if (false && _debugging)   _debug("String_Node_Str");
synchronized (_syncFireAndThread) {
    if (false)     System.out.println(this + "String_Node_Str");
    if (((BooleanToken)(blockAwaitingDatagram.getToken())).booleanValue()) {
      if (false)       System.out.println(this + "String_Node_Str");
      while (_packetsAlreadyAwaitingFire == 0) {
        try {
          if (false)           System.out.println(this + "String_Node_Str");
          _syncFireAndThread.wait();
          if (false)           System.out.println(this + "String_Node_Str");
        }
 catch (        InterruptedException ex) {
          if (false)           System.out.println(this + "String_Node_Str");
        }
      }
    }
 else {
      if (false)       System.out.println(this + "String_Node_Str");
    }
    if (false)     System.out.println(this + "String_Node_Str");
    if (_packetsAlreadyAwaitingFire != 0) {
      if (false)       System.out.println(this + "String_Node_Str");
      boolean forParser=((BooleanToken)(decodeWithPtolemyParser.getToken())).booleanValue();
      if (forParser) {
        _length=_broadcastPacket.getLength();
        _dataStr=new String(_broadcastPacket.getData(),0,_length);
        _evalVar.setExpression(_dataStr);
        _outputToken=_evalVar.getToken();
      }
 else {
        int bytesAvailable=_broadcastPacket.getLength();
        Token[] dataIntTokens=new Token[bytesAvailable];
        byte[] dataBytes=_broadcastPacket.getData();
        for (int j=0; j < bytesAvailable; j++) {
          dataIntTokens[j]=new IntToken(dataBytes[j]);
        }
        _outputToken=new ArrayToken(dataIntTokens);
      }
      _packetsAlreadyAwaitingFire--;
      _syncFireAndThread.notifyAll();
    }
 else {
      if (false)       System.out.println(this + "String_Node_Str");
      _outputToken=defaultOutput.getToken();
    }
    if (false)     System.out.println(this + "String_Node_Str");
    if (false)     System.out.println(this + "String_Node_Str" + _outputToken.toString());
    output.broadcast(_outputToken);
    if (false)     System.out.println(this + "String_Node_Str");
  }
}