File 2785-Fix-getting-data-from-ssh-agent.patch of Package erlang
From 56b6db989fbc777bf21909eb3af3084b2f54bb5b Mon Sep 17 00:00:00 2001
From: Jon Carstens <jjcarstens@me.com>
Date: Thu, 2 Jul 2020 09:19:10 -0600
Subject: [PATCH] Fix getting data from ssh-agent
Attempting to request a user key from the ssh agent may fail because `unpack/1` assumes
that the received packet contains the full response, but in some cases it doesn't.
This fixes that case by making 2 `gen_tcp:recv/3` calls - First, fetch 4 bytes for
the expected length of the data response. Then request that expected length to get
the full response before decoding.
---
 lib/ssh/src/ssh_agent.erl | 10 ++++------
 1 file changed, 4 insertions(+), 6 deletions(-)
diff --git a/lib/ssh/src/ssh_agent.erl b/lib/ssh/src/ssh_agent.erl
index 4b3ce956e2..1c89de2bd1 100644
--- a/lib/ssh/src/ssh_agent.erl
+++ b/lib/ssh/src/ssh_agent.erl
@@ -161,22 +161,20 @@ send(Request, Opts) ->
     BinRequest = pack(encode(Request)),
     ok = gen_tcp:send(Socket, BinRequest),
 
-    {ok, BinResponse} = gen_tcp:recv(Socket, 0, Timeout),
+    {ok, <<Len:32/unsigned-big-integer>>} = gen_tcp:recv(Socket, 4, Timeout),
+    {ok, BinResponse} = gen_tcp:recv(Socket, Len, Timeout),
 
     ok = gen_tcp:close(Socket),
 
-    Response = decode(unpack(BinResponse)),
+    Response = decode(BinResponse),
 
     Response.
 
-%% Message packing and unpacking
+%% Message packing
 
 pack(Data) ->
     <<(size(Data)):32/unsigned-big-integer, Data/binary>>.
 
-unpack(<<Len:32/unsigned-big-integer, Data:Len/binary>>) ->
-    Data.
-
 %% SSH Agent message encoding
 
 encode(#ssh_agent_identities_request{}) ->
-- 
2.26.2