]> granicus.if.org Git - php/commitdiff
merge r292677: Along with the valid char set, also add a length check to the
authorJohannes Schlüter <johannes@php.net>
Mon, 25 Jan 2010 23:06:09 +0000 (23:06 +0000)
committerJohannes Schlüter <johannes@php.net>
Mon, 25 Jan 2010 23:06:09 +0000 (23:06 +0000)
session id here to avoid a lower-level error on the open()
later on in case we exceed MAX_PATH.  The lower level open()
error includes the session dir path in it, so this is a very
low-priority security fix.  People should not be running
production systems with display_errors turned on. (rasmus)

ext/session/mod_files.c

index 8f680f44eeb48888dd9319a122e9eca81683db12..acb1ea0dece22b2b927ad5fac2e0184f1b0ddc3a 100644 (file)
@@ -87,7 +87,9 @@ static int ps_files_valid_key(const char *key)
 
        len = p - key;
 
-       if (len == 0) {
+       /* Somewhat arbitrary length limit here, but should be way more than
+          anyone needs and avoids file-level warnings later on if we exceed MAX_PATH */
+       if (len == 0 || len > 128) {
                ret = 0;
        }
 
@@ -154,7 +156,7 @@ static void ps_files_open(ps_files *data, const char *key TSRMLS_DC)
                ps_files_close(data);
 
                if (!ps_files_valid_key(key)) {
-                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "The session id contains illegal characters, valid characters are a-z, A-Z, 0-9 and '-,'");
+                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "The session id is too long or contains illegal characters, valid characters are a-z, A-Z, 0-9 and '-,'");
                        PS(invalid_session_id) = 1;
                        return;
                }