@@ -58,6 +58,12 @@ PHPAPI zend_class_entry *spl_ce_SplTempFileObject;
5858 RETURN_THROWS(); \
5959 }
6060
61+ #define CHECK_DIRECTORY_ITERATOR_IS_INITIALIZED (intern ) \
62+ if (!(intern)->u.dir.dirp) { \
63+ zend_throw_error(NULL, "Object not initialized"); \
64+ RETURN_THROWS(); \
65+ }
66+
6167static void spl_filesystem_file_free_line (spl_filesystem_object * intern ) /* {{{ */
6268{
6369 if (intern -> u .file .current_line ) {
@@ -768,10 +774,9 @@ PHP_METHOD(DirectoryIterator, rewind)
768774 RETURN_THROWS ();
769775 }
770776
777+ CHECK_DIRECTORY_ITERATOR_IS_INITIALIZED (intern );
771778 intern -> u .dir .index = 0 ;
772- if (intern -> u .dir .dirp ) {
773- php_stream_rewinddir (intern -> u .dir .dirp );
774- }
779+ php_stream_rewinddir (intern -> u .dir .dirp );
775780 spl_filesystem_dir_read (intern );
776781}
777782/* }}} */
@@ -785,11 +790,8 @@ PHP_METHOD(DirectoryIterator, key)
785790 RETURN_THROWS ();
786791 }
787792
788- if (intern -> u .dir .dirp ) {
789- RETURN_LONG (intern -> u .dir .index );
790- } else {
791- RETURN_FALSE ;
792- }
793+ CHECK_DIRECTORY_ITERATOR_IS_INITIALIZED (intern );
794+ RETURN_LONG (intern -> u .dir .index );
793795}
794796/* }}} */
795797
@@ -799,6 +801,8 @@ PHP_METHOD(DirectoryIterator, current)
799801 if (zend_parse_parameters_none () == FAILURE ) {
800802 RETURN_THROWS ();
801803 }
804+
805+ CHECK_DIRECTORY_ITERATOR_IS_INITIALIZED (Z_SPLFILESYSTEM_P (ZEND_THIS ));
802806 RETURN_OBJ_COPY (Z_OBJ_P (ZEND_THIS ));
803807}
804808/* }}} */
@@ -813,6 +817,7 @@ PHP_METHOD(DirectoryIterator, next)
813817 RETURN_THROWS ();
814818 }
815819
820+ CHECK_DIRECTORY_ITERATOR_IS_INITIALIZED (intern );
816821 intern -> u .dir .index ++ ;
817822 do {
818823 spl_filesystem_dir_read (intern );
@@ -835,6 +840,7 @@ PHP_METHOD(DirectoryIterator, seek)
835840 RETURN_THROWS ();
836841 }
837842
843+ CHECK_DIRECTORY_ITERATOR_IS_INITIALIZED (intern );
838844 if (intern -> u .dir .index > pos ) {
839845 /* we first rewind */
840846 zend_call_method_with_0_params (Z_OBJ_P (ZEND_THIS ), Z_OBJCE_P (ZEND_THIS ), & intern -> u .dir .func_rewind , "rewind" , NULL );
@@ -862,6 +868,7 @@ PHP_METHOD(DirectoryIterator, valid)
862868 RETURN_THROWS ();
863869 }
864870
871+ CHECK_DIRECTORY_ITERATOR_IS_INITIALIZED (intern );
865872 RETURN_BOOL (intern -> u .dir .entry .d_name [0 ] != '\0' );
866873}
867874/* }}} */
@@ -920,6 +927,7 @@ PHP_METHOD(DirectoryIterator, getFilename)
920927 RETURN_THROWS ();
921928 }
922929
930+ CHECK_DIRECTORY_ITERATOR_IS_INITIALIZED (intern );
923931 RETURN_STRING (intern -> u .dir .entry .d_name );
924932}
925933/* }}} */
@@ -981,6 +989,7 @@ PHP_METHOD(DirectoryIterator, getExtension)
981989 RETURN_THROWS ();
982990 }
983991
992+ CHECK_DIRECTORY_ITERATOR_IS_INITIALIZED (intern );
984993 fname = php_basename (intern -> u .dir .entry .d_name , strlen (intern -> u .dir .entry .d_name ), NULL , 0 );
985994
986995 p = zend_memrchr (ZSTR_VAL (fname ), '.' , ZSTR_LEN (fname ));
@@ -1038,6 +1047,7 @@ PHP_METHOD(DirectoryIterator, getBasename)
10381047 RETURN_THROWS ();
10391048 }
10401049
1050+ CHECK_DIRECTORY_ITERATOR_IS_INITIALIZED (intern );
10411051 fname = php_basename (intern -> u .dir .entry .d_name , strlen (intern -> u .dir .entry .d_name ), suffix , slen );
10421052
10431053 RETVAL_STR (fname );
@@ -1116,6 +1126,7 @@ PHP_METHOD(DirectoryIterator, isDot)
11161126 RETURN_THROWS ();
11171127 }
11181128
1129+ CHECK_DIRECTORY_ITERATOR_IS_INITIALIZED (intern );
11191130 RETURN_BOOL (spl_filesystem_is_dot (intern -> u .dir .entry .d_name ));
11201131}
11211132/* }}} */
0 commit comments