@@ -58,6 +58,12 @@ PHPAPI zend_class_entry *spl_ce_SplTempFileObject;
58
58
RETURN_THROWS(); \
59
59
}
60
60
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
+
61
67
static void spl_filesystem_file_free_line (spl_filesystem_object * intern ) /* {{{ */
62
68
{
63
69
if (intern -> u .file .current_line ) {
@@ -768,10 +774,9 @@ PHP_METHOD(DirectoryIterator, rewind)
768
774
RETURN_THROWS ();
769
775
}
770
776
777
+ CHECK_DIRECTORY_ITERATOR_IS_INITIALIZED (intern );
771
778
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 );
775
780
spl_filesystem_dir_read (intern );
776
781
}
777
782
/* }}} */
@@ -785,11 +790,8 @@ PHP_METHOD(DirectoryIterator, key)
785
790
RETURN_THROWS ();
786
791
}
787
792
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 );
793
795
}
794
796
/* }}} */
795
797
@@ -799,6 +801,8 @@ PHP_METHOD(DirectoryIterator, current)
799
801
if (zend_parse_parameters_none () == FAILURE ) {
800
802
RETURN_THROWS ();
801
803
}
804
+
805
+ CHECK_DIRECTORY_ITERATOR_IS_INITIALIZED (Z_SPLFILESYSTEM_P (ZEND_THIS ));
802
806
RETURN_OBJ_COPY (Z_OBJ_P (ZEND_THIS ));
803
807
}
804
808
/* }}} */
@@ -813,6 +817,7 @@ PHP_METHOD(DirectoryIterator, next)
813
817
RETURN_THROWS ();
814
818
}
815
819
820
+ CHECK_DIRECTORY_ITERATOR_IS_INITIALIZED (intern );
816
821
intern -> u .dir .index ++ ;
817
822
do {
818
823
spl_filesystem_dir_read (intern );
@@ -835,6 +840,7 @@ PHP_METHOD(DirectoryIterator, seek)
835
840
RETURN_THROWS ();
836
841
}
837
842
843
+ CHECK_DIRECTORY_ITERATOR_IS_INITIALIZED (intern );
838
844
if (intern -> u .dir .index > pos ) {
839
845
/* we first rewind */
840
846
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)
862
868
RETURN_THROWS ();
863
869
}
864
870
871
+ CHECK_DIRECTORY_ITERATOR_IS_INITIALIZED (intern );
865
872
RETURN_BOOL (intern -> u .dir .entry .d_name [0 ] != '\0' );
866
873
}
867
874
/* }}} */
@@ -920,6 +927,7 @@ PHP_METHOD(DirectoryIterator, getFilename)
920
927
RETURN_THROWS ();
921
928
}
922
929
930
+ CHECK_DIRECTORY_ITERATOR_IS_INITIALIZED (intern );
923
931
RETURN_STRING (intern -> u .dir .entry .d_name );
924
932
}
925
933
/* }}} */
@@ -981,6 +989,7 @@ PHP_METHOD(DirectoryIterator, getExtension)
981
989
RETURN_THROWS ();
982
990
}
983
991
992
+ CHECK_DIRECTORY_ITERATOR_IS_INITIALIZED (intern );
984
993
fname = php_basename (intern -> u .dir .entry .d_name , strlen (intern -> u .dir .entry .d_name ), NULL , 0 );
985
994
986
995
p = zend_memrchr (ZSTR_VAL (fname ), '.' , ZSTR_LEN (fname ));
@@ -1038,6 +1047,7 @@ PHP_METHOD(DirectoryIterator, getBasename)
1038
1047
RETURN_THROWS ();
1039
1048
}
1040
1049
1050
+ CHECK_DIRECTORY_ITERATOR_IS_INITIALIZED (intern );
1041
1051
fname = php_basename (intern -> u .dir .entry .d_name , strlen (intern -> u .dir .entry .d_name ), suffix , slen );
1042
1052
1043
1053
RETVAL_STR (fname );
@@ -1116,6 +1126,7 @@ PHP_METHOD(DirectoryIterator, isDot)
1116
1126
RETURN_THROWS ();
1117
1127
}
1118
1128
1129
+ CHECK_DIRECTORY_ITERATOR_IS_INITIALIZED (intern );
1119
1130
RETURN_BOOL (spl_filesystem_is_dot (intern -> u .dir .entry .d_name ));
1120
1131
}
1121
1132
/* }}} */
0 commit comments