Program: 32467
Project: 32467
Buggy source:
/** 
 * END Functions used by the Message Dispatching Queues 
 */
private void sendRPCRequestPrivate(RPCRequest request) throws SdlException {
  try {
    SdlTrace.logRPCEvent(InterfaceActivityDirection.Transmit,request,SDL_LIB_TRACE_KEY);
    byte[] msgBytes=JsonRPCMarshaller.marshall(request,_wiproVersion);
    ProtocolMessage pm=new ProtocolMessage();
    pm.setData(msgBytes);
    if (sdlSession != null)     pm.setSessionID(sdlSession.getSessionId());
    pm.setMessageType(MessageType.RPC);
    pm.setSessionType(SessionType.RPC);
    pm.setFunctionID(FunctionID.getFunctionId(request.getFunctionName()));
    if (request.getCorrelationID() == null) {
      throw new SdlException("String_Node_Str" + request.getFunctionName(),SdlExceptionCause.INVALID_ARGUMENT);
    }
    pm.setCorrID(request.getCorrelationID());
    if (request.getBulkData() != null)     pm.setBulkData(request.getBulkData());
synchronized (OUTGOING_MESSAGE_QUEUE_THREAD_LOCK) {
      if (_outgoingProxyMessageDispatcher != null) {
        _outgoingProxyMessageDispatcher.queueMessage(pm);
        OnRPCUpdateListener listener=request.getOnRPCUpdateListener();
        if (request.getMessageType() == RPCMessage.KEY_REQUEST) {
          addOnUpdateListener(listener,request.getCorrelationID(),msgBytes.length);
        }
      }
    }
  }
 catch (  OutOfMemoryError e) {
    SdlTrace.logProxyEvent("String_Node_Str" + request.getFunctionName(),SDL_LIB_TRACE_KEY);
    throw new SdlException("String_Node_Str" + request.getFunctionName(),e,SdlExceptionCause.INVALID_ARGUMENT);
  }
}

Fixed version (ground truth):
/** 
 * END Functions used by the Message Dispatching Queues 
 */
private void sendRPCRequestPrivate(RPCRequest request) throws SdlException {
  try {
    SdlTrace.logRPCEvent(InterfaceActivityDirection.Transmit,request,SDL_LIB_TRACE_KEY);
    byte[] msgBytes=JsonRPCMarshaller.marshall(request,_wiproVersion);
    ProtocolMessage pm=new ProtocolMessage();
    pm.setData(msgBytes);
    if (sdlSession != null)     pm.setSessionID(sdlSession.getSessionId());
    pm.setMessageType(MessageType.RPC);
    pm.setSessionType(SessionType.RPC);
    pm.setFunctionID(FunctionID.getFunctionId(request.getFunctionName()));
    if (request.getCorrelationID() == null) {
      throw new SdlException("String_Node_Str" + request.getFunctionName(),SdlExceptionCause.INVALID_ARGUMENT);
    }
    pm.setCorrID(request.getCorrelationID());
    if (request.getBulkData() != null)     pm.setBulkData(request.getBulkData());
synchronized (OUTGOING_MESSAGE_QUEUE_THREAD_LOCK) {
      if (_outgoingProxyMessageDispatcher != null) {
        _outgoingProxyMessageDispatcher.queueMessage(pm);
        OnRPCUpdateListener listener=request.getOnRPCUpdateListener();
        if (request.getMessageType().equals(RPCMessage.KEY_REQUEST)) {
          addOnUpdateListener(listener,request.getCorrelationID(),msgBytes.length);
        }
      }
    }
  }
 catch (  OutOfMemoryError e) {
    SdlTrace.logProxyEvent("String_Node_Str" + request.getFunctionName(),SDL_LIB_TRACE_KEY);
    throw new SdlException("String_Node_Str" + request.getFunctionName(),e,SdlExceptionCause.INVALID_ARGUMENT);
  }
}