From 4039169bfbeb648047f38f756b041dcc1fade4fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Dunglas?= Date: Thu, 14 Aug 2025 16:25:33 +0200 Subject: [PATCH 1/9] chore: upgrade to Go 1.25 --- .github/workflows/sanitizers.yaml | 2 +- .github/workflows/static.yaml | 2 +- .github/workflows/tests.yaml | 4 ++-- caddy/go.mod | 2 +- dev-alpine.Dockerfile | 2 +- dev.Dockerfile | 2 +- docker-bake.hcl | 2 +- go.mod | 2 +- go.sum | 6 ------ 9 files changed, 9 insertions(+), 15 deletions(-) diff --git a/.github/workflows/sanitizers.yaml b/.github/workflows/sanitizers.yaml index c8bb302a50..65112ba214 100644 --- a/.github/workflows/sanitizers.yaml +++ b/.github/workflows/sanitizers.yaml @@ -41,7 +41,7 @@ jobs: - uses: actions/checkout@v4 - uses: actions/setup-go@v5 with: - go-version: "1.24" + go-version: "1.25" cache-dependency-path: | go.sum caddy/go.sum diff --git a/.github/workflows/static.yaml b/.github/workflows/static.yaml index faae00c7e0..9aad5fd481 100644 --- a/.github/workflows/static.yaml +++ b/.github/workflows/static.yaml @@ -371,7 +371,7 @@ jobs: ref: ${{ needs.prepare.outputs.ref }} - uses: actions/setup-go@v5 with: - go-version: "1.24" + go-version: "1.25" cache-dependency-path: | go.sum caddy/go.sum diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index 4a0415c58b..f28272bcff 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -34,7 +34,7 @@ jobs: - uses: actions/checkout@v4 - uses: actions/setup-go@v5 with: - go-version: "1.24" + go-version: "1.25" cache-dependency-path: | go.sum caddy/go.sum @@ -88,7 +88,7 @@ jobs: - uses: actions/checkout@v4 - uses: actions/setup-go@v5 with: - go-version: "1.24" + go-version: "1.25" cache-dependency-path: | go.sum caddy/go.sum diff --git a/caddy/go.mod b/caddy/go.mod index 77bf58dc2d..87faba82a3 100644 --- a/caddy/go.mod +++ b/caddy/go.mod @@ -1,6 +1,6 @@ module github.com/dunglas/frankenphp/caddy -go 1.24.0 +go 1.25.0 replace github.com/dunglas/frankenphp => ../ diff --git a/dev-alpine.Dockerfile b/dev-alpine.Dockerfile index 63be2fb051..6bc5a17cc7 100644 --- a/dev-alpine.Dockerfile +++ b/dev-alpine.Dockerfile @@ -1,7 +1,7 @@ # syntax=docker/dockerfile:1 #checkov:skip=CKV_DOCKER_2 #checkov:skip=CKV_DOCKER_3 -FROM golang:1.24-alpine +FROM golang:1.25-alpine ENV GOTOOLCHAIN=local ENV CFLAGS="-ggdb3" diff --git a/dev.Dockerfile b/dev.Dockerfile index fde91b0cdf..ce3c5a1253 100644 --- a/dev.Dockerfile +++ b/dev.Dockerfile @@ -1,7 +1,7 @@ # syntax=docker/dockerfile:1 #checkov:skip=CKV_DOCKER_2 #checkov:skip=CKV_DOCKER_3 -FROM golang:1.24 +FROM golang:1.25 ENV GOTOOLCHAIN=local ENV CFLAGS="-ggdb3" diff --git a/docker-bake.hcl b/docker-bake.hcl index 915354c418..c1d19435c1 100644 --- a/docker-bake.hcl +++ b/docker-bake.hcl @@ -11,7 +11,7 @@ variable "PHP_VERSION" { } variable "GO_VERSION" { - default = "1.24" + default = "1.25" } variable "SHA" {} diff --git a/go.mod b/go.mod index a19195d416..3c79398091 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/dunglas/frankenphp -go 1.24.0 +go 1.25.0 retract v1.0.0-rc.1 // Human error diff --git a/go.sum b/go.sum index 74d2f74abe..97918cffad 100644 --- a/go.sum +++ b/go.sum @@ -40,8 +40,6 @@ github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_golang v1.22.0 h1:rb93p9lokFEsctTys46VnV1kLCDpVZ0a/Y92Vm0Zc6Q= -github.com/prometheus/client_golang v1.22.0/go.mod h1:R7ljNsLXhuQXYZYtw6GAE9AZg8Y7vEW5scdCXrWRXC0= github.com/prometheus/client_golang v1.23.0 h1:ust4zpdl9r4trLY/gSjlm07PuiBq2ynaXXlptpfy8Uc= github.com/prometheus/client_golang v1.23.0/go.mod h1:i/o0R9ByOnHX0McrTMTyhYvKE4haaf2mW08I+jGAjEE= github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk= @@ -70,14 +68,10 @@ golang.org/x/crypto v0.40.0 h1:r4x+VvoG5Fm+eJcxMaY8CQM7Lb0l1lsmjGBQ6s8BfKM= golang.org/x/crypto v0.40.0/go.mod h1:Qr1vMER5WyS2dfPHAlsOj01wgLbsyWtFn/aY+5+ZdxY= golang.org/x/net v0.42.0 h1:jzkYrhi3YQWD6MLBJcsklgQsoAcw89EcZbJw8Z614hs= golang.org/x/net v0.42.0/go.mod h1:FF1RA5d3u7nAYA4z2TkclSCKh68eSXtiFwcWQpPXdt8= -golang.org/x/sys v0.34.0 h1:H5Y5sJ2L2JRdyv7ROF1he/lPdvFsd0mJHFw2ThKHxLA= -golang.org/x/sys v0.34.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI= golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= golang.org/x/text v0.27.0 h1:4fGWRpyh641NLlecmyl4LOe6yDdfaYNrGb2zdfo4JV4= golang.org/x/text v0.27.0/go.mod h1:1D28KMCvyooCX9hBiosv5Tz/+YLxj0j7XhWjpSUF7CU= -google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY= -google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY= google.golang.org/protobuf v1.36.7 h1:IgrO7UwFQGJdRNXH/sQux4R1Dj1WAKcLElzeeRaXV2A= google.golang.org/protobuf v1.36.7/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= From 34823baadbaff946023b9ec418fad494f82a9d7b Mon Sep 17 00:00:00 2001 From: Alliballibaba Date: Fri, 15 Aug 2025 22:59:03 +0200 Subject: [PATCH 2/9] free all interned strings (test) --- frankenphp.c | 4 ++++ frankenphp.h | 1 + phpmainthread.go | 11 +++++++++++ 3 files changed, 16 insertions(+) diff --git a/frankenphp.c b/frankenphp.c index 102af2db7f..0a42b6766c 100644 --- a/frankenphp.c +++ b/frankenphp.c @@ -698,6 +698,10 @@ zend_string *frankenphp_init_persistent_string(const char *string, size_t len) { return z_string; } +void frankenphp_free_persistent_string(zend_string *zstr) { + pefree(zstr, 1); +} + static void frankenphp_register_variable_from_request_info(zend_string *zKey, char *value, bool must_be_present, diff --git a/frankenphp.h b/frankenphp.h index 246a221d65..08fca39ce4 100644 --- a/frankenphp.h +++ b/frankenphp.h @@ -72,6 +72,7 @@ void frankenphp_register_variables_from_request_info( void frankenphp_register_variable_safe(char *key, char *var, size_t val_len, zval *track_vars_array); zend_string *frankenphp_init_persistent_string(const char *string, size_t len); +void frankenphp_free_persistent_string(zend_string *zstr); int frankenphp_reset_opcache(void); int frankenphp_get_current_memory_limit(); void frankenphp_add_assoc_str_ex(zval *track_vars_array, char *key, diff --git a/phpmainthread.go b/phpmainthread.go index 3154bb77ba..ea2bccb4d5 100644 --- a/phpmainthread.go +++ b/phpmainthread.go @@ -177,6 +177,17 @@ func (mainThread *phpMainThread) setAutomaticMaxThreads() { //export go_frankenphp_shutdown_main_thread func go_frankenphp_shutdown_main_thread() { mainThread.state.set(stateReserved) + + // free all permanent interned strings + for _, zendString := range mainThread.commonHeaders { + C.frankenphp_free_persistent_string(zendString) + } + for _, zendString := range mainThread.knownServerKeys { + C.frankenphp_free_persistent_string(zendString) + } + for _, zendString := range mainThread.sandboxedEnv { + C.frankenphp_free_persistent_string(zendString) + } } //export go_get_custom_php_ini From 8044895a5282317deb299a7f0d7c2129a0d72fbf Mon Sep 17 00:00:00 2001 From: Alliballibaba Date: Fri, 15 Aug 2025 23:06:00 +0200 Subject: [PATCH 3/9] Revert "free all interned strings (test)" This reverts commit 34823baadbaff946023b9ec418fad494f82a9d7b. --- frankenphp.c | 4 ---- frankenphp.h | 1 - phpmainthread.go | 11 ----------- 3 files changed, 16 deletions(-) diff --git a/frankenphp.c b/frankenphp.c index 0a42b6766c..102af2db7f 100644 --- a/frankenphp.c +++ b/frankenphp.c @@ -698,10 +698,6 @@ zend_string *frankenphp_init_persistent_string(const char *string, size_t len) { return z_string; } -void frankenphp_free_persistent_string(zend_string *zstr) { - pefree(zstr, 1); -} - static void frankenphp_register_variable_from_request_info(zend_string *zKey, char *value, bool must_be_present, diff --git a/frankenphp.h b/frankenphp.h index 08fca39ce4..246a221d65 100644 --- a/frankenphp.h +++ b/frankenphp.h @@ -72,7 +72,6 @@ void frankenphp_register_variables_from_request_info( void frankenphp_register_variable_safe(char *key, char *var, size_t val_len, zval *track_vars_array); zend_string *frankenphp_init_persistent_string(const char *string, size_t len); -void frankenphp_free_persistent_string(zend_string *zstr); int frankenphp_reset_opcache(void); int frankenphp_get_current_memory_limit(); void frankenphp_add_assoc_str_ex(zval *track_vars_array, char *key, diff --git a/phpmainthread.go b/phpmainthread.go index ea2bccb4d5..3154bb77ba 100644 --- a/phpmainthread.go +++ b/phpmainthread.go @@ -177,17 +177,6 @@ func (mainThread *phpMainThread) setAutomaticMaxThreads() { //export go_frankenphp_shutdown_main_thread func go_frankenphp_shutdown_main_thread() { mainThread.state.set(stateReserved) - - // free all permanent interned strings - for _, zendString := range mainThread.commonHeaders { - C.frankenphp_free_persistent_string(zendString) - } - for _, zendString := range mainThread.knownServerKeys { - C.frankenphp_free_persistent_string(zendString) - } - for _, zendString := range mainThread.sandboxedEnv { - C.frankenphp_free_persistent_string(zendString) - } } //export go_get_custom_php_ini From 43dfede5b60de63b30fd050ec449a356203714a7 Mon Sep 17 00:00:00 2001 From: Alliballibaba Date: Fri, 15 Aug 2025 23:12:19 +0200 Subject: [PATCH 4/9] Another test. --- phpmainthread.go | 1 + 1 file changed, 1 insertion(+) diff --git a/phpmainthread.go b/phpmainthread.go index 3154bb77ba..cac4e4fcb9 100644 --- a/phpmainthread.go +++ b/phpmainthread.go @@ -177,6 +177,7 @@ func (mainThread *phpMainThread) setAutomaticMaxThreads() { //export go_frankenphp_shutdown_main_thread func go_frankenphp_shutdown_main_thread() { mainThread.state.set(stateReserved) + mainThread = nil } //export go_get_custom_php_ini From 88bcf4b09bd1db214db6bc65042cd94aa6ba5cb9 Mon Sep 17 00:00:00 2001 From: Alliballibaba Date: Sat, 16 Aug 2025 14:00:43 +0200 Subject: [PATCH 5/9] Another test --- phpmainthread.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/phpmainthread.go b/phpmainthread.go index cac4e4fcb9..3c8d3ff610 100644 --- a/phpmainthread.go +++ b/phpmainthread.go @@ -177,7 +177,9 @@ func (mainThread *phpMainThread) setAutomaticMaxThreads() { //export go_frankenphp_shutdown_main_thread func go_frankenphp_shutdown_main_thread() { mainThread.state.set(stateReserved) - mainThread = nil + mainThread.knownServerKeys = nil + mainThread.commonHeaders = nil + mainThread.sandboxedEnv = nil } //export go_get_custom_php_ini From b4a89b95db18fe72833068de5ef3c36c7ae7b108 Mon Sep 17 00:00:00 2001 From: Alliballibaba Date: Sat, 16 Aug 2025 14:16:32 +0200 Subject: [PATCH 6/9] ASAN_OPTIONS: detect_leaks=0 --- .github/workflows/sanitizers.yaml | 1 + phpmainthread.go | 3 --- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/sanitizers.yaml b/.github/workflows/sanitizers.yaml index 65112ba214..c074b73a6d 100644 --- a/.github/workflows/sanitizers.yaml +++ b/.github/workflows/sanitizers.yaml @@ -35,6 +35,7 @@ jobs: USE_ZEND_ALLOC: 0 LIBRARY_PATH: ${{ github.workspace }}/php/target/lib:${{ github.workspace }}/watcher/target/lib LD_LIBRARY_PATH: ${{ github.workspace }}/php/target/lib + ASAN_OPTIONS: detect_leaks=0 steps: - name: Remove local PHP run: sudo apt-get remove --purge --autoremove 'php*' 'libmemcached*' diff --git a/phpmainthread.go b/phpmainthread.go index 3c8d3ff610..3154bb77ba 100644 --- a/phpmainthread.go +++ b/phpmainthread.go @@ -177,9 +177,6 @@ func (mainThread *phpMainThread) setAutomaticMaxThreads() { //export go_frankenphp_shutdown_main_thread func go_frankenphp_shutdown_main_thread() { mainThread.state.set(stateReserved) - mainThread.knownServerKeys = nil - mainThread.commonHeaders = nil - mainThread.sandboxedEnv = nil } //export go_get_custom_php_ini From 4ef7c9cf9385863ea6875882c52624bb194ca806 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Dunglas?= Date: Sun, 17 Aug 2025 21:08:11 +0200 Subject: [PATCH 7/9] Update sanitizers.yaml --- .github/workflows/sanitizers.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/sanitizers.yaml b/.github/workflows/sanitizers.yaml index c074b73a6d..bf935ae34a 100644 --- a/.github/workflows/sanitizers.yaml +++ b/.github/workflows/sanitizers.yaml @@ -35,6 +35,7 @@ jobs: USE_ZEND_ALLOC: 0 LIBRARY_PATH: ${{ github.workspace }}/php/target/lib:${{ github.workspace }}/watcher/target/lib LD_LIBRARY_PATH: ${{ github.workspace }}/php/target/lib + # PHP doesn't free some memory on purpose, we have to disable leak detection: https://tip.golang.org/doc/go1.25#go-command ASAN_OPTIONS: detect_leaks=0 steps: - name: Remove local PHP From 5e8bf9249a5d044a985415554969957a2c8dc93a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Dunglas?= Date: Sun, 17 Aug 2025 21:08:56 +0200 Subject: [PATCH 8/9] Update sanitizers.yaml --- .github/workflows/sanitizers.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/sanitizers.yaml b/.github/workflows/sanitizers.yaml index bf935ae34a..1490e04656 100644 --- a/.github/workflows/sanitizers.yaml +++ b/.github/workflows/sanitizers.yaml @@ -35,7 +35,7 @@ jobs: USE_ZEND_ALLOC: 0 LIBRARY_PATH: ${{ github.workspace }}/php/target/lib:${{ github.workspace }}/watcher/target/lib LD_LIBRARY_PATH: ${{ github.workspace }}/php/target/lib - # PHP doesn't free some memory on purpose, we have to disable leak detection: https://tip.golang.org/doc/go1.25#go-command + # PHP doesn't free some memory on purpose, we have to disable leak detection: https://go.dev/doc/go1.25#go-command ASAN_OPTIONS: detect_leaks=0 steps: - name: Remove local PHP From de0773a9d75270fe20353a5cc3b2f862981efe48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Dunglas?= Date: Sun, 17 Aug 2025 21:09:25 +0200 Subject: [PATCH 9/9] Update sanitizers.yaml --- .github/workflows/sanitizers.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/sanitizers.yaml b/.github/workflows/sanitizers.yaml index 1490e04656..b35513d760 100644 --- a/.github/workflows/sanitizers.yaml +++ b/.github/workflows/sanitizers.yaml @@ -35,7 +35,7 @@ jobs: USE_ZEND_ALLOC: 0 LIBRARY_PATH: ${{ github.workspace }}/php/target/lib:${{ github.workspace }}/watcher/target/lib LD_LIBRARY_PATH: ${{ github.workspace }}/php/target/lib - # PHP doesn't free some memory on purpose, we have to disable leak detection: https://go.dev/doc/go1.25#go-command + # PHP doesn't free some memory on purpose, we have to disable leaks detection: https://go.dev/doc/go1.25#go-command ASAN_OPTIONS: detect_leaks=0 steps: - name: Remove local PHP