summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Esser <sesser@php.net>2007-06-16 07:48:23 +0000
committerStefan Esser <sesser@php.net>2007-06-16 07:48:23 +0000
commit3e3788177f640c2cbe048892da21f9381d12a30a (patch)
tree527898ce3dc069ac2d26e9882509c65489c07fd0
parent83828a3ddb78fe1b10f539447ad4b32ff9b2229a (diff)
downloadphp-git-3e3788177f640c2cbe048892da21f9381d12a30a.tar.gz
MFH
-rw-r--r--ext/session/session.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/ext/session/session.c b/ext/session/session.c
index 328eb8adec..102e65e114 100644
--- a/ext/session/session.c
+++ b/ext/session/session.c
@@ -666,7 +666,7 @@ static void php_session_initialize(TSRMLS_D)
int vallen;
/* check session name for invalid characters */
- if (PS(id) && strpbrk(PS(id), "\r\n\t <>'\"\\()@,;:[]?={}&%")) {
+ if (PS(id) && strpbrk(PS(id), "\r\n\t <>'\"\\")) {
efree(PS(id));
PS(id) = NULL;
}
@@ -918,6 +918,7 @@ static void php_session_send_cookie(TSRMLS_D)
{
smart_str ncookie = {0};
char *date_fmt = NULL;
+ char *e_session_name, *e_id;
if (SG(headers_sent)) {
char *output_start_filename = php_get_output_start_filename(TSRMLS_C);
@@ -931,11 +932,18 @@ static void php_session_send_cookie(TSRMLS_D)
}
return;
}
+
+ /* URL encode session_name and id because they might be user supplied */
+ e_session_name = php_url_encode(PS(session_name), strlen(PS(session_name)), NULL);
+ e_id = php_url_encode(PS(id), strlen(PS(id)), NULL);
smart_str_appends(&ncookie, COOKIE_SET_COOKIE);
- smart_str_appends(&ncookie, PS(session_name));
+ smart_str_appends(&ncookie, e_session_name);
smart_str_appendc(&ncookie, '=');
- smart_str_appends(&ncookie, PS(id));
+ smart_str_appends(&ncookie, e_id);
+
+ efree(e_session_name);
+ efree(e_id);
if (PS(cookie_lifetime) > 0) {
struct timeval tv;