]> granicus.if.org Git - php/commitdiff
Improve "VirtualProtect() failed" error messages
authorChristoph M. Becker <cmbecker69@gmx.de>
Tue, 30 Jun 2020 07:52:39 +0000 (09:52 +0200)
committerChristoph M. Becker <cmbecker69@gmx.de>
Tue, 30 Jun 2020 11:23:41 +0000 (13:23 +0200)
When `mprotect()` fails, the error message contains `errno` and the
respective `strerror()`; we add basically the same info on Windows.

ext/opcache/jit/zend_jit.c

index 09c4691034cf686338ef29533cc76e286dcd6cac..3b7c9e1ec46824f3e0fed27851c373a1d247b1d9 100644 (file)
@@ -3543,7 +3543,10 @@ ZEND_EXT_API void zend_jit_unprotect(void)
                DWORD old;
 
                if (!VirtualProtect(dasm_buf, dasm_size, PAGE_READWRITE, &old)) {
-                       fprintf(stderr, "VirtualProtect() failed\n");
+                       DWORD err = GetLastError();
+                       char *msg = php_win32_error_to_msg(err);
+                       fprintf(stderr, "VirtualProtect() failed [%u] %s\n", err, msg);
+                       php_win32_error_msg_free(msg);
                }
        }
 #endif
@@ -3562,7 +3565,10 @@ ZEND_EXT_API void zend_jit_protect(void)
                DWORD old;
 
                if (!VirtualProtect(dasm_buf, dasm_size, PAGE_EXECUTE_READ, &old)) {
-                       fprintf(stderr, "VirtualProtect() failed\n");
+                       DWORD err = GetLastError();
+                       char *msg = php_win32_error_to_msg(err);
+                       fprintf(stderr, "VirtualProtect() failed [%u] %s\n", err, msg);
+                       php_win32_error_msg_free(msg);
                }
        }
 #endif
@@ -3775,13 +3781,19 @@ ZEND_EXT_API int zend_jit_startup(void *buf, size_t size, zend_bool reattached)
                DWORD old;
 
                if (!VirtualProtect(dasm_buf, dasm_size, PAGE_EXECUTE_READWRITE, &old)) {
-                       fprintf(stderr, "VirtualProtect() failed\n");
+                       DWORD err = GetLastError();
+                       char *msg = php_win32_error_to_msg(err);
+                       fprintf(stderr, "VirtualProtect() failed [%u] %s\n", err, msg);
+                       php_win32_error_msg_free(msg);
                }
        } else {
                DWORD old;
 
                if (!VirtualProtect(dasm_buf, dasm_size, PAGE_EXECUTE_READ, &old)) {
-                       fprintf(stderr, "VirtualProtect() failed\n");
+                       DWORD err = GetLastError();
+                       char *msg = php_win32_error_to_msg(err);
+                       fprintf(stderr, "VirtualProtect() failed [%u] %s\n", err, msg);
+                       php_win32_error_msg_free(msg);
                }
        }
 #endif