> >- REGISTER_STRINGL_CONSTANT("SID", empty_string, 0, 0);
> >+ REGISTER_STRINGL_CONSTANT("SID", "", 0, 1);
> >
> > Where flags changed from 0 to 1..
> > Intentional or not?
> >
> Yes, the flag change was intentional in order to create an allocated empty
> string.
>
The fourth parameter to REGISTER_STRINGL_CONSTANT is supposed to be flags
(e.g. CONST_CS, CONST_PERSIST) not a copy indicator.
The underlying implementation of zend_register_stringl_constant() never
copies value:
#define REGISTER_STRINGL_CONSTANT(name, str, len, flags)
zend_register_stringl_constant((name), sizeof(name), (str), (len), (flags),
module_number TSRMLS_CC)
ZEND_API void zend_register_stringl_constant(char *name, uint name_len, char
*strval, uint strlen, int flags, int module_number TSRMLS_DC)
{
zend_constant c;
c.value.type = IS_STRING;
c.value.value.str.val = strval;
c.value.value.str.len = strlen;
c.flags = flags;
c.name = zend_strndup(name, name_len-1);
c.name_len = name_len;
c.module_number = module_number;
zend_register_constant(&c TSRMLS_CC);
}
By setting flags to 1 (the value of CONST_CS), the zend_register_constant()
function uses the unmodified "SID" as the constant name, rather than the
strtolower()'d "sid" which is what session_regenerate_id() attempts to
destroy.
-Sara
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php