diff options
Diffstat (limited to 'src/sp_session.c')
| -rw-r--r-- | src/sp_session.c | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/src/sp_session.c b/src/sp_session.c index 550b83d..b3db622 100644 --- a/src/sp_session.c +++ b/src/sp_session.c | |||
| @@ -30,19 +30,18 @@ static int sp_hook_s_read(PS_READ_ARGS) { | |||
| 30 | const sp_config_session *config_session = | 30 | const sp_config_session *config_session = |
| 31 | SNUFFLEUPAGUS_G(config).config_session; | 31 | SNUFFLEUPAGUS_G(config).config_session; |
| 32 | 32 | ||
| 33 | if (r == SUCCESS && config_session->encrypt && val != NULL && *val != NULL && | 33 | if ((NULL == val) || (NULL == *val) || (0 == ZSTR_LEN(*val))) { |
| 34 | ZSTR_LEN(*val)) { | 34 | return r; |
| 35 | } | ||
| 36 | |||
| 37 | if (r == SUCCESS && config_session->encrypt) { | ||
| 35 | zend_string *orig_val = *val; | 38 | zend_string *orig_val = *val; |
| 36 | zval val_zval; | 39 | zval val_zval; |
| 37 | ZVAL_PSTRINGL(&val_zval, ZSTR_VAL(*val), ZSTR_LEN(*val)); | 40 | ZVAL_PSTRINGL(&val_zval, ZSTR_VAL(*val), ZSTR_LEN(*val)); |
| 38 | 41 | ||
| 39 | int ret = decrypt_zval(&val_zval, config_session->simulation, NULL); | 42 | int ret = decrypt_zval(&val_zval, config_session->simulation, NULL); |
| 40 | if (0 != ret) { | 43 | if (ZEND_HASH_APPLY_KEEP != ret) { |
| 41 | if (config_session->simulation) { | 44 | zend_bailout(); |
| 42 | return ret; | ||
| 43 | } else { | ||
| 44 | zend_bailout(); | ||
| 45 | } | ||
| 46 | } | 45 | } |
| 47 | 46 | ||
| 48 | *val = zend_string_dup(val_zval.value.str, 0); | 47 | *val = zend_string_dup(val_zval.value.str, 0); |
