]> granicus.if.org Git - php/commitdiff
Transmit phpdbg webdata len in little-endian
authorSebastian Ramadan <plebbyastian@gmail.com>
Sat, 16 Dec 2017 23:21:47 +0000 (00:21 +0100)
committerNikita Popov <nikita.ppv@gmail.com>
Sat, 16 Dec 2017 23:24:45 +0000 (00:24 +0100)
Rather than using machine-endianness through a UB cast.

sapi/phpdbg/phpdbg_rinit_hook.c
sapi/phpdbg/phpdbg_webdata_transfer.c
sapi/phpdbg/phpdbg_webdata_transfer.h

index 667f32ea1a4062bd38ef68e4dda54e447398de15..c62b272a16e24ae9c3182105892d88a9cd4357ac 100644 (file)
@@ -56,9 +56,9 @@ static PHP_RINIT_FUNCTION(phpdbg_webhelper) /* {{{ */
        {
                struct sockaddr_un sock;
                int s = socket(AF_UNIX, SOCK_STREAM, 0);
-               int len = strlen(PHPDBG_WG(path)) + sizeof(sock.sun_family);
+               size_t len = strlen(PHPDBG_WG(path)) + sizeof(sock.sun_family);
                char buf[(1 << 8) + 1];
-               int buflen;
+               ssize_t buflen;
                sock.sun_family = AF_UNIX;
                strcpy(sock.sun_path, PHPDBG_WG(path));
 
@@ -67,11 +67,15 @@ static PHP_RINIT_FUNCTION(phpdbg_webhelper) /* {{{ */
                }
 
                char *msg = NULL;
-               char msglen[5] = {0};
-               phpdbg_webdata_compress(&msg, (int *)msglen);
-
-               send(s, msglen, 4, 0);
-               send(s, msg, *(int *) msglen, 0);
+               size_t msglen = 0;
+               phpdbg_webdata_compress(&msg, &msglen);
+
+               buf[0] = (msglen >>  0) & 0xff;
+               buf[1] = (msglen >>  8) & 0xff;
+               buf[2] = (msglen >> 16) & 0xff;
+               buf[3] = (msglen >> 24) & 0xff;
+               send(s, buf, 4, 0);
+               send(s, msg, msglen, 0);
 
                while ((buflen = recv(s, buf, sizeof(buf) - 1, 0)) > 0) {
                        php_write(buf, buflen);
index 411ee9238fcff824b4cb210130cafad8c7d782b6..5cb6ea4a2d861b2d4495895ababdc41e4ede2dc6 100644 (file)
@@ -27,7 +27,7 @@ static int phpdbg_is_auto_global(char *name, int len) {
        return ret;
 }
 
-PHPDBG_API void phpdbg_webdata_compress(char **msg, int *len) {
+PHPDBG_API void phpdbg_webdata_compress(char **msg, size_t *len) {
        zval array;
        HashTable *ht;
        zval zv[9] = {{{0}}};
index b8da8c1fd3dc7c5ba02b6454bf6fd2bfe88631d9..b8473d30ef8667827fce24744e4a2be6cea38120 100644 (file)
@@ -22,6 +22,6 @@
 #include "zend.h"
 #include "phpdbg.h"
 
-PHPDBG_API void phpdbg_webdata_compress(char **msg, int *len);
+PHPDBG_API void phpdbg_webdata_compress(char **msg, size_t *len);
 
 #endif /* PHPDBG_WEBDATA_TRANSFER_H */