@@ -40,13 +40,25 @@ func (t *pipeTransport) Poll() (*message, error) {
4040 return nil , fmt .Errorf ("could not read protocol data: %w" , err )
4141 }
4242
43+ // Ensure data buffer is cleared after use - fixes memory dump visibility issue
44+ defer func () {
45+ // Clear sensitive JSON data from memory to prevent memory dump exposure
46+ for i := range data {
47+ data [i ] = 0
48+ }
49+ data = nil
50+ }()
51+
4352 msg := & message {}
4453 if err := json .Unmarshal (data , & msg ); err != nil {
4554 return nil , fmt .Errorf ("could not decode json: %w" , err )
4655 }
4756 if os .Getenv ("DEBUGP" ) != "" {
48- fmt .Fprintf (os .Stdout , "\x1b [33mRECV>\x1b [0m\n %s\n " , data )
57+ // Only show message metadata in debug, not content
58+ fmt .Fprintf (os .Stdout , "\x1b [33mRECV>\x1b [0m Message ID: %d, Method: %s, GUID: %s\n " ,
59+ msg .ID , msg .Method , msg .GUID )
4960 }
61+ // Only log metadata, not message content
5062 return msg , nil
5163}
5264
@@ -69,13 +81,42 @@ func (t *pipeTransport) Send(msg map[string]interface{}) error {
6981 if err != nil {
7082 return fmt .Errorf ("pipeTransport: could not marshal json: %w" , err )
7183 }
84+
85+ // Ensure msgBytes is cleared after use - fixes memory dump visibility issue
86+ defer func () {
87+ // Clear sensitive JSON data from memory to prevent memory dump exposure
88+ for i := range msgBytes {
89+ msgBytes [i ] = 0
90+ }
91+ msgBytes = nil
92+ }()
93+
7294 if os .Getenv ("DEBUGP" ) != "" {
73- fmt .Fprintf (os .Stdout , "\x1b [32mSEND>\x1b [0m\n %s \n " , msgBytes )
95+ fmt .Fprintf (os .Stderr , "\x1b [32mSEND>\x1b [0m\n [JSON DATA REDACTED FOR SECURITY] \n " )
7496 }
7597
7698 lengthPadding := make ([]byte , 4 )
7799 binary .LittleEndian .PutUint32 (lengthPadding , uint32 (len (msgBytes )))
78- if _ , err = t .writer .Write (append (lengthPadding , msgBytes ... )); err != nil {
100+
101+ // Create secure write buffer to avoid keeping msgBytes in append result
102+ writeBuffer := make ([]byte , 4 + len (msgBytes ))
103+ copy (writeBuffer , lengthPadding )
104+ copy (writeBuffer [4 :], msgBytes )
105+
106+ // Clear intermediate buffers
107+ for i := range lengthPadding {
108+ lengthPadding [i ] = 0
109+ }
110+
111+ defer func () {
112+ // Clear write buffer to prevent memory dump exposure
113+ for i := range writeBuffer {
114+ writeBuffer [i ] = 0
115+ }
116+ writeBuffer = nil
117+ }()
118+
119+ if _ , err = t .writer .Write (writeBuffer ); err != nil {
79120 return err
80121 }
81122 return nil
0 commit comments