anchor.diff:      var oldLimit = _currentLimit;
       _currentLimit = _bufferPos + length;
       if (_currentLimit > oldLimit) {
  -      _reportTruncatedMessage(_currentLimit);
  +      _throwTruncatedMessageError(_currentLimit);
       }
       ++_recursionDepth;
       message.mergeFromCodedBufferReader(this, extensionRegistry);
  
positive.code:     byteLimit += _bufferPos;
      var oldLimit = _currentLimit;
      if ((oldLimit != -1 && byteLimit > oldLimit) || byteLimit > _sizeLimit) {
        _reportTruncatedMessage(byteLimit);
      }
      _currentLimit = byteLimit;
      callback();
  
negative.code:     _currentLimit = _sizeLimit;
    }
  
    void _throwTruncatedMessageError(int limit) {
      if (limit > _sizeLimit && limit <= _buffer.length) {
        throw InvalidProtocolBufferException.truncatedMessageDueToSizeLimit(
            _buffer.length, _sizeLimit);
  