Author: ts Date: Tue Jan 15 09:01:41 2008 New Revision: 7147 Log: - Fixed issue #10205: binding variables with an undeclared var doesn't throw an exception. If getState() on a persistent object does not return an array an exception is thrown now.
Added: trunk/PersistentObject/src/exceptions/invalid_object_state.php (with props) trunk/PersistentObject/tests/data/persistent_test_object_invalid_state.php (with props) trunk/PersistentObject/tests/data/persistenttestobjectinvalidstate.php (with props) Modified: trunk/PersistentObject/ChangeLog trunk/PersistentObject/design/class_diagram.png trunk/PersistentObject/src/persistent_autoload.php trunk/PersistentObject/src/persistent_session.php trunk/PersistentObject/tests/persistent_session_misc_test.php trunk/PersistentObject/tests/persistent_session_test.php Modified: trunk/PersistentObject/ChangeLog ============================================================================== --- trunk/PersistentObject/ChangeLog [iso-8859-1] (original) +++ trunk/PersistentObject/ChangeLog [iso-8859-1] Tue Jan 15 09:01:41 2008 @@ -2,6 +2,9 @@ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - Refactored ezcPersistentSession. +- Fixed issue #10205: binding variables with an undeclared var doesn't throw + an exception. If getState() on a persistent object does not return an array + an exception is thrown now. 1.3.4 - Monday 14 January 2008 Modified: trunk/PersistentObject/design/class_diagram.png ============================================================================== Binary files - no diff available. Added: trunk/PersistentObject/src/exceptions/invalid_object_state.php ============================================================================== --- trunk/PersistentObject/src/exceptions/invalid_object_state.php (added) +++ trunk/PersistentObject/src/exceptions/invalid_object_state.php [iso-8859-1] Tue Jan 15 09:01:41 2008 @@ -1,0 +1,37 @@ +<?php +/** + * File containing the ezcPersistentObjectAlreadyPersistentException class + * + * @package PersistentObject + * @version //autogen// + * @copyright Copyright (C) 2005-2008 eZ systems as. All rights reserved. + * @license http://ez.no/licenses/new_bsd New BSD License + */ + +/** + * Exception thrown if the result of $object->getState() is invalid. + * + * @package PersistentObject + * @version //autogen// + */ +class ezcPersistentInvalidObjectStateException extends ezcPersistentObjectException +{ + /** + * Creates a new exception. + * + * Creates a new ezcPersistentInvalidObjectStateException for the given + * $object with the given $reason. + * + * @param object $object + * @param string $reason + */ + public function __construct( $object, $reason = null ) + { + parent::__construct( + 'The state returned by an object of class ' . get_class( $object ) . ' was invalid.' + . ( $reason !== null ? " (Reason: $reason)" : '' ) + ); + } +} + +?> Propchange: trunk/PersistentObject/src/exceptions/invalid_object_state.php ------------------------------------------------------------------------------ svn:eol-style = native Modified: trunk/PersistentObject/src/persistent_autoload.php ============================================================================== --- trunk/PersistentObject/src/persistent_autoload.php [iso-8859-1] (original) +++ trunk/PersistentObject/src/persistent_autoload.php [iso-8859-1] Tue Jan 15 09:01:41 2008 @@ -16,6 +16,7 @@ 'ezcPersistentIdentifierGenerationException' => 'PersistentObject/exceptions/identifier_generation.php', 'ezcPersistentObjectAlreadyPersistentException' => 'PersistentObject/exceptions/already_persistent.php', 'ezcPersistentObjectNotPersistentException' => 'PersistentObject/exceptions/not_persistent.php', + 'ezcPersistentInvalidObjectStateException' => 'PersistentObject/exceptions/invalid_object_state.php', 'ezcPersistentQueryException' => 'PersistentObject/exceptions/query_exception.php', 'ezcPersistentRelatedObjectNotFoundException' => 'PersistentObject/exceptions/related_object_not_found.php', 'ezcPersistentRelationInvalidException' => 'PersistentObject/exceptions/relation_invalid.php', Modified: trunk/PersistentObject/src/persistent_session.php ============================================================================== --- trunk/PersistentObject/src/persistent_session.php [iso-8859-1] (original) +++ trunk/PersistentObject/src/persistent_session.php [iso-8859-1] Tue Jan 15 09:01:41 2008 @@ -601,8 +601,16 @@ */ public function getObjectState( $object ) { - // @todo Chekcs about object state should be added here, configurable. - return $object->getState(); + // Common sanity check. + if ( !is_array( $state = $object->getState() ) ) + { + throw new ezcPersistentInvalidObjectStateException( + $object, + 'Is type ' . gettype( $state ) . ' instead of array.' + ); + } + // @todo: Add more optional sanity checks. + return $state; } /** Added: trunk/PersistentObject/tests/data/persistent_test_object_invalid_state.php ============================================================================== --- trunk/PersistentObject/tests/data/persistent_test_object_invalid_state.php (added) +++ trunk/PersistentObject/tests/data/persistent_test_object_invalid_state.php [iso-8859-1] Tue Jan 15 09:01:41 2008 @@ -1,0 +1,15 @@ +<?php + +require_once 'persistent_test_object.php'; + +class PersistentTestObjectInvalidState extends PersistentTestObject +{ + public $state = null; + + public function getState() + { + return $this->state; + } +} + +?> Propchange: trunk/PersistentObject/tests/data/persistent_test_object_invalid_state.php ------------------------------------------------------------------------------ svn:eol-style = native Added: trunk/PersistentObject/tests/data/persistenttestobjectinvalidstate.php ============================================================================== --- trunk/PersistentObject/tests/data/persistenttestobjectinvalidstate.php (added) +++ trunk/PersistentObject/tests/data/persistenttestobjectinvalidstate.php [iso-8859-1] Tue Jan 15 09:01:41 2008 @@ -1,0 +1,41 @@ +<?php +/* + * Holds the definition for PersistentTestObject + * This definition is used by the code manager for + * various tests in the system. + */ +// build definition +$def = new ezcPersistentObjectDefinition(); +$def->table = "PO_test"; +$def->class = "PersistentTestObjectInvalidState"; + +$def->idProperty = new ezcPersistentObjectIdProperty; +$def->idProperty->columnName = 'id'; +$def->idProperty->propertyName = 'id'; +$def->idProperty->generator = new ezcPersistentGeneratorDefinition( + 'ezcPersistentSequenceGenerator', + array( 'sequence' => 'PO_test_id_seq' ) +); + +$def->properties['varchar'] = new ezcPersistentObjectProperty; +$def->properties['varchar']->columnName = 'type_varchar'; +$def->properties['varchar']->propertyName = 'varchar'; +$def->properties['varchar']->propertyType = ezcPersistentObjectProperty::PHP_TYPE_STRING; + +$def->properties['integer'] = new ezcPersistentObjectProperty; +$def->properties['integer']->columnName = 'type_integer'; +$def->properties['integer']->propertyName = 'integer'; +$def->properties['integer']->propertyType = ezcPersistentObjectProperty::PHP_TYPE_INT; + +$def->properties['decimal'] = new ezcPersistentObjectProperty; +$def->properties['decimal']->columnName = 'type_decimal'; +$def->properties['decimal']->propertyName = 'decimal'; +$def->properties['decimal']->propertyType = ezcPersistentObjectProperty::PHP_TYPE_FLOAT;; + +$def->properties['text'] = new ezcPersistentObjectProperty; +$def->properties['text']->columnName = 'type_text'; +$def->properties['text']->propertyName = 'text'; +$def->properties['text']->propertyType = ezcPersistentObjectProperty::PHP_TYPE_STRING;; +return $def; + +?> Propchange: trunk/PersistentObject/tests/data/persistenttestobjectinvalidstate.php ------------------------------------------------------------------------------ svn:eol-style = native Modified: trunk/PersistentObject/tests/persistent_session_misc_test.php ============================================================================== --- trunk/PersistentObject/tests/persistent_session_misc_test.php [iso-8859-1] (original) +++ trunk/PersistentObject/tests/persistent_session_misc_test.php [iso-8859-1] Tue Jan 15 09:01:41 2008 @@ -144,6 +144,51 @@ $this->removeTempDir(); } + + public function testInvalidStateException() + { + $obj = new PersistentTestObjectInvalidState(); + + $obj->state = null; + try + { + $this->session->save( $obj ); + $this->fail( 'Exception not thrown with state null.' ); + } + catch( ezcPersistentInvalidObjectStateException $e ) {} + + $obj->state = 23; + try + { + $this->session->save( $obj ); + $this->fail( 'Exception not thrown with state integer.' ); + } + catch( ezcPersistentInvalidObjectStateException $e ) {} + + $obj->state = new stdClass(); + try + { + $this->session->save( $obj ); + $this->fail( 'Exception not thrown with state object.' ); + } + catch( ezcPersistentInvalidObjectStateException $e ) {} + + $obj->state = 'foo'; + try + { + $this->session->save( $obj ); + $this->fail( 'Exception not thrown with state string.' ); + } + catch( ezcPersistentInvalidObjectStateException $e ) {} + + $obj->state = true; + try + { + $this->session->save( $obj ); + $this->fail( 'Exception not thrown with state bool.' ); + } + catch( ezcPersistentInvalidObjectStateException $e ) {} + } } ?> Modified: trunk/PersistentObject/tests/persistent_session_test.php ============================================================================== --- trunk/PersistentObject/tests/persistent_session_test.php [iso-8859-1] (original) +++ trunk/PersistentObject/tests/persistent_session_test.php [iso-8859-1] Tue Jan 15 09:01:41 2008 @@ -11,6 +11,7 @@ require_once 'data/persistent_test_object.php'; require_once 'data/persistent_test_object_no_id.php'; require_once 'data/persistent_test_object_converter.php'; +require_once 'data/persistent_test_object_invalid_state.php'; require_once 'data/relation_test_address.php'; require_once 'data/relation_test_person.php'; -- svn-components mailing list svn-components@lists.ez.no http://lists.ez.no/mailman/listinfo/svn-components