Fix network communication on arm64

Base messages consist of four uint32 integers.
Wrongly, integers are declared as a four-element uintptr_t array.
The 16 bytes are written directly by recv().
This works great for arm32, but on arm64 uintptr_t is 64 bit (8 bytes).

This patch reads four 32-bit integers and writes them into the uintptr_t
array.
This commit is contained in:
Alexander Simon 2019-08-07 13:39:18 +02:00
parent 5847d5c099
commit 55d8b880fc
1 changed files with 16 additions and 1 deletions

View File

@ -6953,6 +6953,7 @@ static void *pthSocketThreadHandler(void *fdC)
{ {
int sock = *(int*)fdC; int sock = *(int*)fdC;
uintptr_t p[10]; uintptr_t p[10];
uint32_t tmp;
int opt; int opt;
char buf[CMD_MAX_EXTENSION]; char buf[CMD_MAX_EXTENSION];
@ -6964,7 +6965,21 @@ static void *pthSocketThreadHandler(void *fdC)
while (1) while (1)
{ {
if (recv(sock, p, 16, MSG_WAITALL) != 16) break; if (sizeof(uintptr_t) == 8)
{
if (recv(sock, &tmp, 4, MSG_WAITALL) != 4) break;
p[0] = (uintptr_t)tmp;
if (recv(sock, &tmp, 4, MSG_WAITALL) != 4) break;
p[1] = (uintptr_t)tmp;
if (recv(sock, &tmp, 4, MSG_WAITALL) != 4) break;
p[2] = (uintptr_t)tmp;
if (recv(sock, &tmp, 4, MSG_WAITALL) != 4) break;
p[3] = (uintptr_t)tmp;
}
else
{
if (recv(sock, p, 16, MSG_WAITALL) != 16) break;
}
if (p[3]) if (p[3])
{ {