Thanks you for report :)
Could you apply attached patch. It should fix the problem.
Please let me know if this patch fixed it or not.
--
Yasuo Ohgaki
[EMAIL PROTECTED] wrote:
> ID: 13078
> User updated by: [EMAIL PROTECTED]
> Reported By: [EMAIL PROTECTED]
> Status: Critical
> Bug Type: Session related
> Operating System: FreeBSD 4.x
> PHP Version: 4.0.6, 4.1.0
> New Comment:
>
> Sorry, but further testing revealed when sess_read
>
> return NULL;
>
> for when nothing was found caused problems sometimes, not always!
>
> However
>
> return '';
>
> seems to work all of the time!
>
> Looks like sess_write has to return a '' (null string) It cannot return NULL, nor it
>return false;
>
> Otherise sess_write will never be called!
> ---ends---
>
> Previous Comments:
> ------------------------------------------------------------------------
>
> [2001-12-14 00:19:21] [EMAIL PROTECTED]
>
> Problem solved in 4.1.0 (release).
>
> All thanks to [EMAIL PROTECTED] for pointing me to his very well written code!
>
> I found the reason my sess_write was never called with register_globals = off was
>because my sess_read function was something like this:
>
> sess_read( $key)
> ...
> if I find stuff for $key from PostgreSQL {
> return $valuesfound;
> }
> else {
> return false;
> }
>
> The problem was with "return false;"
> After changing:
>
> return false;
>
> to
> return NULL;
>
> things worked.
>
> Don't know why the "return false" worked with "register_globals=on" and
>"register_global=off" requires sess_read to return NULL if nothing was found...
>
> THANKS again to [EMAIL PROTECTED] for his code and my apologise for wasting people's
>time.
>
> Please feel free to close this bug report. I am not closing it because
>[EMAIL PROTECTED] brought up something which I don't know about nor can I duplicate.
> ---ends---
>
>
>
> ------------------------------------------------------------------------
>
> [2001-12-13 22:04:18] [EMAIL PROTECTED]
>
> Just to note that I can not reproduce this with latest CVS.
>
> --Jani
>
>
> ------------------------------------------------------------------------
>
> [2001-12-13 05:55:59] [EMAIL PROTECTED]
>
> PHP 4.1.0 (release)
>
> TEST SCRIPT:
> <?php
> session_start();
> $_SESSION['test'] = 'YES';
> echo ini_get('register_globals');
> ?>
>
> SESSION FILE CONTENTS:
>
> With register_globals = 1:
> <empty>
>
> With register_globals = 0:
> test|s:3:"YES";
>
> ------------------------------------------------------------------------
>
> [2001-12-13 05:14:14] [EMAIL PROTECTED]
>
> Yes, I have problems with or without session_register/unregister.
>
> In fact, I first tried:
>
> $_SESSION["varname"] = "somevaluehere";
>
> to see if it was saved. But it was NOT. So, I tried this:
>
> session_register("varname");
> $_SESSION["varname"] = "somevaluehere";
>
> thinking it would help. Anyhow, none of the above worked.
>
> Once again, if
>
> register_globals=on
>
> then, everything is fine.
> ---ends---
>
> ------------------------------------------------------------------------
>
> [2001-12-13 04:52:52] [EMAIL PROTECTED]
>
> When you use $_SESSION or $HTTP_SESSION_VARS, you don't need
>session_register/unregister to save session vars.
> Do you have problem still when you don't use session_register/unregister?
>
>
> ------------------------------------------------------------------------
>
> The remainder of the comments for this report are too long. To view
> the rest of the comments, please view the bug report online at
> http://bugs.php.net/?id=13078
>
>
> Edit this bug report at http://bugs.php.net/?id=13078&edit=1
>
>
--
Yasuo Ohgaki
Index: mod_user.c
===================================================================
RCS file: /repository/php4/ext/session/mod_user.c,v
retrieving revision 1.17
diff -u -r1.17 mod_user.c
--- mod_user.c 30 Jul 2001 08:24:34 -0000 1.17
+++ mod_user.c 14 Dec 2001 07:33:21 -0000
@@ -125,16 +125,17 @@
SESS_ZVAL_STRING(key, args[0]);
retval = ps_call_handler(PSF(read), 1, args);
-
+
if (retval) {
- if (retval->type == IS_STRING) {
+ convert_to_string_ex(&retval);
+ if (retval->value.str.len) {
*val = estrndup(retval->value.str.val, retval->value.str.len);
*vallen = retval->value.str.len;
ret = SUCCESS;
}
zval_ptr_dtor(&retval);
}
-
+
return ret;
}
--
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]