#29985 [Asn]: unserialize()/ __PHP_Incomplete_class does not report correctly class name

2005-10-10 Thread nohn
 ID:   29985
 Updated by:   [EMAIL PROTECTED]
 Reported By:  [EMAIL PROTECTED]
 Status:   Assigned
 Bug Type: Session related
 Operating System: *
 PHP Version:  5CVS-2005-10-06 (snap)
 Assigned To:  helly
 New Comment:

Could also reproduce that simple testcase with

mod_php/Apache 1.3/Win32
mod_php/Apache 2.0/Linux

(not with the latest CVS but with PHP 5.0.4 (which does not matter if
it's only fixed in HEAD)


Previous Comments:


[2005-10-10 11:38:23] [EMAIL PROTECTED]

Marcus..?




[2005-10-10 09:42:15] [EMAIL PROTECTED]

Sorry, this has nothing to do with CLI. It also happens in a much more
complex (mod_php) web enviroment.

There is no unknown in my reproduction code and I can't see, what

---
Fatal error: main(): The script tried to execute a method or access a
property of an incomplete object. Please ensure that the class
definition bar of the object you are trying to operate on was loaded
_before_ unserialize() gets called or provide a __autoload() function
to
load the class definition  in C:\Dokumente und
Einstellungen\nohn_s\Desktop\php5.1-win32-200510031830\test.php on
line
2
---

has to do with the CLI or the causing location.



[2005-10-09 15:36:10] [EMAIL PROTECTED]

Thank you for your bug report. This issue has already been fixed
in the latest released version of PHP, which you can download at 
http://www.php.net/downloads.php

This is fixed in all actrive branches, 4.3.*, 5.0.*, 5.1.*, HEAD. The
'Unknown' comes from cli and specifies the causing location and has
nothing to do with the class name.



[2005-10-09 15:27:25] [EMAIL PROTECTED]

I claimed fixed in CVS which is HEAD which will be 6 not any 5.*



[2005-10-06 18:27:38] [EMAIL PROTECTED]

Marcus, you claimed to have fixed this. Can you check it out?



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/29985

-- 
Edit this bug report at http://bugs.php.net/?id=29985edit=1


#29985 [Asn]: unserialize()/ __PHP_Incomplete_class does not report correctly class name

2005-10-09 Thread helly
 ID:   29985
 Updated by:   [EMAIL PROTECTED]
 Reported By:  [EMAIL PROTECTED]
 Status:   Assigned
 Bug Type: Session related
 Operating System: *
 PHP Version:  5CVS-2005-10-06 (snap)
 Assigned To:  helly
 New Comment:

I claimed fixed in CVS which is HEAD which will be 6 not any 5.*


Previous Comments:


[2005-10-06 18:27:38] [EMAIL PROTECTED]

Marcus, you claimed to have fixed this. Can you check it out?



[2005-10-06 15:40:02] [EMAIL PROTECTED]

Yes, it is reproducible:

C:\Dokumente und
Einstellungen\nohn_s\Desktop\php5.1-win32-200510031830php test.php
object(__PHP_Incomplete_Class)#1 (2) {
  [__PHP_Incomplete_Class_Name]=
  string(3) bar
  [someProp]=
  int(2)
}

Fatal error: main(): The script tried to execute a method or access a
property of an incomplete object. Please ensure that the class
definition bar of the object you are trying to operate on was loaded
_before_ unserialize() gets called or provide a __autoload() function
to load the class definition  in C:\Dokumente und
Einstellungen\nohn_s\Desktop\php5.1-win32-200510031830\test.php on line
2





[2005-10-06 15:15:23] [EMAIL PROTECTED]

Can you reproduce with 5.1-dev?




[2005-10-06 14:56:58] [EMAIL PROTECTED]

Reopening this bug. Could reproduce it with PHP 5.0.5 on WinXP:

type test.php
?php
class foo{function someFunc(){} var$someProp=2;}$a=serialize(new
foo());$b=str_replace('foo','bar',$a);var_dum
p($c = unserialize($b));$c-someFunc();
?
php test.php
object(__PHP_Incomplete_Class)#1 (2) {
  [__PHP_Incomplete_Class_Name]=
  string(3) bar
  [someProp]=
  int(2)
}

Fatal error: main(): The script tried to execute a method or access a
property of an incomplete object. Please ensure that the class
definition bar of the object you are trying to operate on was loaded
_before_ unserialize() gets called or provide a __autoload() function
to load the class definition  in C:\Dokumente und
Einstellungen\nohn_s\Desktop\php-5.0.5\test.php on line 2




[2004-09-05 19:46:24] [EMAIL PROTECTED]

This bug has been fixed in CVS.

Snapshots of the sources are packaged every three hours; this change
will be in the next snapshot. You can grab the snapshot at
http://snaps.php.net/.
 
Thank you for the report, and for helping us make PHP better.



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/29985

-- 
Edit this bug report at http://bugs.php.net/?id=29985edit=1


#29985 [Asn]: unserialize()/ __PHP_Incomplete_class does not report correctly class name

2005-10-06 Thread nohn
 ID:   29985
 Updated by:   [EMAIL PROTECTED]
 Reported By:  [EMAIL PROTECTED]
 Status:   Assigned
 Bug Type: Session related
 Operating System: Linux, Win32
-PHP Version:  5.0.5
+PHP Version:  5.0.5, 5.1.0RC2-dev
 Assigned To:  nohn
 New Comment:

Yes, it is reproducible:

C:\Dokumente und
Einstellungen\nohn_s\Desktop\php5.1-win32-200510031830php test.php
object(__PHP_Incomplete_Class)#1 (2) {
  [__PHP_Incomplete_Class_Name]=
  string(3) bar
  [someProp]=
  int(2)
}

Fatal error: main(): The script tried to execute a method or access a
property of an incomplete object. Please ensure that the class
definition bar of the object you are trying to operate on was loaded
_before_ unserialize() gets called or provide a __autoload() function
to load the class definition  in C:\Dokumente und
Einstellungen\nohn_s\Desktop\php5.1-win32-200510031830\test.php on line
2




Previous Comments:


[2005-10-06 15:15:23] [EMAIL PROTECTED]

Can you reproduce with 5.1-dev?




[2005-10-06 14:56:58] [EMAIL PROTECTED]

Reopening this bug. Could reproduce it with PHP 5.0.5 on WinXP:

type test.php
?php
class foo{function someFunc(){} var$someProp=2;}$a=serialize(new
foo());$b=str_replace('foo','bar',$a);var_dum
p($c = unserialize($b));$c-someFunc();
?
php test.php
object(__PHP_Incomplete_Class)#1 (2) {
  [__PHP_Incomplete_Class_Name]=
  string(3) bar
  [someProp]=
  int(2)
}

Fatal error: main(): The script tried to execute a method or access a
property of an incomplete object. Please ensure that the class
definition bar of the object you are trying to operate on was loaded
_before_ unserialize() gets called or provide a __autoload() function
to load the class definition  in C:\Dokumente und
Einstellungen\nohn_s\Desktop\php-5.0.5\test.php on line 2




[2004-09-05 19:46:24] [EMAIL PROTECTED]

This bug has been fixed in CVS.

Snapshots of the sources are packaged every three hours; this change
will be in the next snapshot. You can grab the snapshot at
http://snaps.php.net/.
 
Thank you for the report, and for helping us make PHP better.



[2004-09-05 14:30:14] [EMAIL PROTECTED]

Hmm.. I really don't understand why incomplete_class_message() looks
for class_name in EG(This), while class_name is property of the object,
which could be easily passed to incomplete_class_message().
So, this patch should probably fix it:
http://tony2001.phpclub.net/dev/tmp/bug29985.diff
Comments are welcome.



[2004-09-05 13:47:38] [EMAIL PROTECTED]

Description:

The idea is that when an object is unserialized and the class
definition is still not loaded then it is converted   to
__PHP_Incomplete_Class class. From the dump of the actual result one
can see that the name is stored in a member variable
__PHP_Incomplete_Class_Name. So far everything looks ok. But when one
tries to execute a method on incomplete class object it leads to a
fatal error. This is also correct. However the name of the class is
unknown is the message. This is not correct and the example works
with PHP 4.3.8(cli). However does not work with current HEAD (probably
not with the PHP_5 branch).

One additional thing is that the message is misleading. A serialized
object may not come always from a session but can be loaded from a file
by the user or ,like in my case where I found the error, from a socket.

Thanks

Reproduce code:
---
php -r 'class foo{function someFunc(){} var
$someProp=2;}$a=serialize(new foo());$b=str_replace('foo','bar',
$a);var_dump($c = unserialize($b));$c-someFunc();'

Expected result:

object(__PHP_Incomplete_Class)#1 (2) {
  [__PHP_Incomplete_Class_Name]=
  string(3) bar
  [someProp]=
  int(2)
}

Fatal error: Unknown: The script tried to execute a method or access a
property of an incomplete object. Please ensure that the class
definition bbar/b of the object you are trying to operate on was
loaded _before_ the session was started in Command line code on line 1


Actual result:
--
object(__PHP_Incomplete_Class)#1 (2) {
  [__PHP_Incomplete_Class_Name]=
  string(3) bar
  [someProp]=
  int(2)
}

Fatal error: Unknown: The script tried to execute a method or access a
property of an incomplete object. Please ensure that the class
definition bunknown/b of the object you are trying to operate on
was loaded _before_ the session was started in Command line code on
line 1






-- 
Edit this bug report at http://bugs.php.net/?id=29985edit=1