From 2973de6fe1ec9e2cfe4fd54c764df493843de085 Mon Sep 17 00:00:00 2001
From: Zhang Bo <bozhang@ebay.com>
Date: Fri, 10 Nov 2023 01:28:12 -0700
Subject: [PATCH] add magic number to avoid unexpected collison

---
 agent/agent.go         | 10 +++++++++-
 internal/cmd/shared.go |  3 +++
 internal/internal.go   |  5 ++++-
 3 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/agent/agent.go b/agent/agent.go
index 07a3e80b..d9cbaecb 100644
--- a/agent/agent.go
+++ b/agent/agent.go
@@ -207,6 +207,14 @@ func formatBytes(val uint64) string {
 }
 
 func handle(conn io.ReadWriter, msg []byte) error {
+	reader := bufio.NewReader(conn)
+	magic, err := binary.ReadVarint(reader)
+	if err != nil {
+		return err
+	}
+	if magic != internal.MAGIC {
+		return fmt.Errorf("gops: invalid magic number: %v", magic)
+	}
 	switch msg[0] {
 	case signal.StackTrace:
 		return pprof.Lookup("goroutine").WriteTo(conn, 2)
@@ -286,7 +294,7 @@ func handle(conn io.ReadWriter, msg []byte) error {
 		time.Sleep(5 * time.Second)
 		trace.Stop()
 	case signal.SetGCPercent:
-		perc, err := binary.ReadVarint(bufio.NewReader(conn))
+		perc, err := binary.ReadVarint(reader)
 		if err != nil {
 			return err
 		}
diff --git a/internal/cmd/shared.go b/internal/cmd/shared.go
index fc11e6b2..8e54ca1d 100644
--- a/internal/cmd/shared.go
+++ b/internal/cmd/shared.go
@@ -306,6 +306,9 @@ func cmdLazy(addr net.TCPAddr, c byte, params ...byte) (io.Reader, error) {
 		return nil, err
 	}
 	buf := []byte{c}
+	magic := make([]byte, binary.MaxVarintLen64)
+	binary.PutVarint(magic, internal.MAGIC)
+	buf = append(buf, magic...)
 	buf = append(buf, params...)
 	if _, err := conn.Write(buf); err != nil {
 		return nil, err
diff --git a/internal/internal.go b/internal/internal.go
index 7e3492aa..376b1d71 100644
--- a/internal/internal.go
+++ b/internal/internal.go
@@ -13,7 +13,10 @@ import (
 	"strings"
 )
 
-const gopsConfigDirEnvKey = "GOPS_CONFIG_DIR"
+const (
+	goipsConfigDirEnvKey = "GOPS_CONFIG_DIR"
+	MAGIC                = 0xabcdefedcba
+)
 
 func ConfigDir() (string, error) {
 	if configDir := os.Getenv(gopsConfigDirEnvKey); configDir != "" {