diff --git a/ext/session/mod_mm.c b/ext/session/mod_mm.c index d6312c5fa1f3..917694dd2891 100644 --- a/ext/session/mod_mm.c +++ b/ext/session/mod_mm.c @@ -264,28 +264,50 @@ static void ps_mm_destroy(ps_mm *data) PHP_MINIT_FUNCTION(ps_mm) { - size_t save_path_len = ZSTR_LEN(PS(save_path)); - size_t mod_name_len = strlen(sapi_module.name); - size_t euid_len; - char *ps_mm_path, euid[30]; - zend_result ret; + ps_mm_instance = NULL; + php_session_register_module(&ps_mod_mm); + return SUCCESS; +} - ps_mm_instance = calloc(sizeof(*ps_mm_instance), 1); - if (!ps_mm_instance) { +PHP_MSHUTDOWN_FUNCTION(ps_mm) +{ + if (ps_mm_instance) { + ps_mm_destroy(ps_mm_instance); + return SUCCESS; + } + return FAILURE; +} + +PS_OPEN_FUNC(mm) +{ + if (ps_mm_instance) { + ps_mm_debug(("open: ps_mm_instance=%p\n", ps_mm_instance)); + PS_SET_MOD_DATA(ps_mm_instance); + return SUCCESS; + } + + char euid[30]; + size_t euid_len = slprintf(euid, sizeof(euid), "%d", geteuid()); + if (!euid_len) { return FAILURE; } - if (!(euid_len = slprintf(euid, sizeof(euid), "%d", geteuid()))) { - free(ps_mm_instance); - ps_mm_instance = NULL; + ps_mm_instance = calloc(1, sizeof(*ps_mm_instance)); + if (!ps_mm_instance) { return FAILURE; } + ps_mm_debug(("open: ps_mm_instance=%p\n", ps_mm_instance)); + + const char *save_path_cstr = ZSTR_VAL(save_path); + size_t save_path_len = ZSTR_LEN(save_path); + size_t mod_name_len = strlen(sapi_module.name); + /* Directory + '/' + File + Module Name + Effective UID + \0 */ - ps_mm_path = emalloc(save_path_len + 1 + (sizeof(PS_MM_FILE) - 1) + mod_name_len + euid_len + 1); + char *ps_mm_path = emalloc(save_path_len + 1 + (sizeof(PS_MM_FILE) - 1) + mod_name_len + euid_len + 1); - memcpy(ps_mm_path, ZSTR_VAL(PS(save_path)), save_path_len); - if (save_path_len && ZSTR_VAL(PS(save_path))[save_path_len - 1] != DEFAULT_SLASH) { + memcpy(ps_mm_path, save_path_cstr, save_path_len); + if (save_path_len && save_path_cstr[save_path_len - 1] != DEFAULT_SLASH) { ps_mm_path[save_path_len] = DEFAULT_SLASH; save_path_len++; } @@ -296,7 +318,7 @@ PHP_MINIT_FUNCTION(ps_mm) memcpy(ps_mm_path + save_path_len, euid, euid_len); ps_mm_path[save_path_len + euid_len] = '\0'; - ret = ps_mm_initialize(ps_mm_instance, ps_mm_path); + zend_result ret = ps_mm_initialize(ps_mm_instance, ps_mm_path); efree(ps_mm_path); @@ -306,26 +328,6 @@ PHP_MINIT_FUNCTION(ps_mm) return FAILURE; } - php_session_register_module(&ps_mod_mm); - return SUCCESS; -} - -PHP_MSHUTDOWN_FUNCTION(ps_mm) -{ - if (ps_mm_instance) { - ps_mm_destroy(ps_mm_instance); - return SUCCESS; - } - return FAILURE; -} - -PS_OPEN_FUNC(mm) -{ - ps_mm_debug(("open: ps_mm_instance=%p\n", ps_mm_instance)); - - if (!ps_mm_instance) { - return FAILURE; - } PS_SET_MOD_DATA(ps_mm_instance); return SUCCESS;