Program: 75354
Project: 75354
Buggy source:
/** 
 * Execute the change by evaluating the request and propagating the request if appropriate.
 * @exception Exception If an exception is thrownwhile evaluating the request.
 */
protected void _execute() throws Exception {
  if (_DEBUG) {
    System.out.println("String_Node_Str");
    System.out.println(getDescription());
    if (_context != null) {
      System.out.println("String_Node_Str" + _context.getFullName());
    }
  }
  if (_context != null) {
    _parser=ParserAttribute.getParser(_context);
    _parser.reset();
  }
  if (_parser == null) {
    _parser=new MoMLParser();
  }
  try {
    _parser._propagator=_propagator;
    _parser._propagatingContext=_context;
    if (_context != null) {
      _parser.setContext(_context);
    }
    if (_undoable) {
      _parser.setUndoable(true);
    }
    ErrorHandler handler=MoMLParser.getErrorHandler();
    if (!_reportToHandler) {
      MoMLParser.setErrorHandler(null);
    }
    try {
      _parser.parse(_base,getDescription());
    }
  finally {
      if (!_reportToHandler) {
        MoMLParser.setErrorHandler(handler);
      }
    }
  }
  finally {
    _parser._propagator=null;
    _parser._propagatingContext=null;
  }
  if (_undoable && _mergeWithPreviousUndo) {
    UndoStackAttribute undoInfo=UndoStackAttribute.getUndoInfo(_context);
    undoInfo.mergeTopTwo();
  }
  if (!_enablePropagation) {
    if (_DEBUG) {
      System.out.println("String_Node_Str");
    }
    return;
  }
  NamedObj context=(NamedObj)_context;
  if (context == null) {
    context=_parser.getToplevel();
  }
  if (_propagator == null) {
    _propagator=this;
  }
  String relativeName=null;
  while (context != null) {
    if (!(context instanceof Prototype)) {
      if (relativeName == null) {
        relativeName=context.getName();
      }
 else {
        relativeName=context.getName() + "String_Node_Str" + relativeName;
      }
      context=(NamedObj)context.getContainer();
      continue;
    }
    List othersList=((Prototype)context).getDeferredFrom();
    if (othersList != null) {
      Iterator others=othersList.iterator();
      while (others.hasNext()) {
        WeakReference reference=(WeakReference)others.next();
        NamedObj other=(NamedObj)reference.get();
        if (other != null) {
          if (_DEBUG) {
            System.out.println("String_Node_Str" + other.getFullName() + "String_Node_Str"+ context.getFullName());
          }
          NamedObj trueContext=other;
          if (context != _context) {
            trueContext=((CompositeEntity)other).getEntity(relativeName);
          }
          if (_propagator._propagatedContexts == null) {
            _propagator._propagatedContexts=new HashSet();
          }
 else {
            if (_propagator._propagatedContexts.contains(trueContext)) {
              if (_DEBUG) {
                System.out.println("String_Node_Str" + other.getFullName() + "String_Node_Str"+ trueContext.getFullName());
              }
              continue;
            }
          }
          _propagator._propagatedContexts.add(trueContext);
          String moml=getDescription();
          if (_DEBUG) {
            System.out.println("String_Node_Str" + moml + "String_Node_Str"+ trueContext.getFullName()+ "String_Node_Str"+ _propagator);
          }
          MoMLChangeRequest newChange=new MoMLChangeRequest(getSource(),trueContext,moml,_base,_propagator);
          other.requestChange(newChange);
        }
      }
    }
    if (relativeName == null) {
      relativeName=context.getName();
    }
 else {
      relativeName=context.getName() + "String_Node_Str" + relativeName;
    }
    context=(NamedObj)context.getContainer();
  }
}

Fixed version (ground truth):
/** 
 * Execute the change by evaluating the request and propagating the request if appropriate.
 * @exception Exception If an exception is thrownwhile evaluating the request.
 */
protected void _execute() throws Exception {
  if (_DEBUG) {
    System.out.println("String_Node_Str");
    System.out.println(getDescription());
    if (_context != null) {
      System.out.println("String_Node_Str" + _context.getFullName());
    }
  }
  if (_context != null) {
    _parser=ParserAttribute.getParser(_context);
    _parser.reset();
  }
  if (_parser == null) {
    _parser=new MoMLParser();
  }
  try {
    _parser._propagator=_propagator;
    _parser._propagatingContext=_context;
    if (_context != null) {
      _parser.setContext(_context);
    }
    if (_undoable) {
      _parser.setUndoable(true);
    }
    ErrorHandler handler=MoMLParser.getErrorHandler();
    if (!_reportToHandler) {
      MoMLParser.setErrorHandler(null);
    }
    try {
      _parser.parse(_base,getDescription());
    }
  finally {
      if (!_reportToHandler) {
        MoMLParser.setErrorHandler(handler);
      }
    }
  }
  finally {
    _parser._propagator=null;
    _parser._propagatingContext=null;
  }
  if (_undoable && _mergeWithPreviousUndo) {
    UndoStackAttribute undoInfo=UndoStackAttribute.getUndoInfo(_context);
    undoInfo.mergeTopTwo();
  }
  if (!_enablePropagation) {
    if (_DEBUG) {
      System.out.println("String_Node_Str");
    }
    return;
  }
  NamedObj context=_context;
  if (context == null) {
    context=_parser.getToplevel();
  }
  if (_propagator == null) {
    _propagator=this;
  }
  String relativeName=null;
  while (context != null) {
    if (!(context instanceof Prototype)) {
      if (relativeName == null) {
        relativeName=context.getName();
      }
 else {
        relativeName=context.getName() + "String_Node_Str" + relativeName;
      }
      context=(NamedObj)context.getContainer();
      continue;
    }
    List othersList=((Prototype)context).getDeferredFrom();
    if (othersList != null) {
      Iterator others=othersList.iterator();
      while (others.hasNext()) {
        WeakReference reference=(WeakReference)others.next();
        NamedObj other=(NamedObj)reference.get();
        if (other != null) {
          if (_DEBUG) {
            System.out.println("String_Node_Str" + other.getFullName() + "String_Node_Str"+ context.getFullName());
          }
          NamedObj trueContext=other;
          if (context != _context) {
            if (_context instanceof ComponentEntity) {
              trueContext=((CompositeEntity)other).getEntity(relativeName);
            }
 else             if (_context instanceof Attribute) {
              trueContext=other.getAttribute(relativeName);
            }
 else             if (_context instanceof Port) {
              trueContext=((Entity)other).getPort(relativeName);
            }
 else             if (_context instanceof Relation) {
              trueContext=((CompositeEntity)other).getRelation(relativeName);
            }
            if (trueContext == null) {
              throw new InternalErrorException("String_Node_Str" + other.getFullName() + "String_Node_Str"+ "String_Node_Str"+ relativeName);
            }
          }
          if (_propagator._propagatedContexts == null) {
            _propagator._propagatedContexts=new HashSet();
          }
 else {
            if (_propagator._propagatedContexts.contains(trueContext)) {
              if (_DEBUG) {
                System.out.println("String_Node_Str" + other.getFullName() + "String_Node_Str"+ trueContext.getFullName());
              }
              continue;
            }
          }
          _propagator._propagatedContexts.add(trueContext);
          String moml=getDescription();
          if (_DEBUG) {
            System.out.println("String_Node_Str" + moml + "String_Node_Str"+ trueContext.getFullName()+ "String_Node_Str"+ _propagator);
          }
          MoMLChangeRequest newChange=new MoMLChangeRequest(getSource(),trueContext,moml,_base,_propagator);
          other.requestChange(newChange);
        }
      }
    }
    if (relativeName == null) {
      relativeName=context.getName();
    }
 else {
      relativeName=context.getName() + "String_Node_Str" + relativeName;
    }
    context=(NamedObj)context.getContainer();
  }
}