code: func parseOldHandshakeResponseBody(ctx context.Context, packet *handshakeResponse41, data []byte, offset int) (err error) {
  	defer func() {
  		// Check malformat packet cause out of range is disgusting, but don't panic!
  		if r := recover(); r != nil {
  			logutil.Logger(ctx).Error("handshake panic", zap.ByteString("packetData", data))
  			err = mysql.ErrMalformPacket
  		}
  	}()
  	// user name
  	packet.User = string(data[offset : offset+bytes.IndexByte(data[offset:], 0)])
  	offset += len(packet.User) + 1
  
  	if packet.Capability&mysql.ClientConnectWithDB > 0 {
  		if len(data[offset:]) > 0 {
  			idx := bytes.IndexByte(data[offset:], 0)
  			packet.DBName = string(data[offset : offset+idx])
  			offset = offset + idx + 1
  		}
  		if len(data[offset:]) > 0 {
  			packet.Auth = data[offset : offset+bytes.IndexByte(data[offset:], 0)]
  		}
  	} else {
  		packet.Auth = data[offset : offset+bytes.IndexByte(data[offset:], 0)]
  	}
  
  	return nil
  }
docs: // parseOldHandshakeResponseBody parse the HandshakeResponse for Protocol::HandshakeResponse320 (except the common header part).