]> granicus.if.org Git - php/commitdiff
fix possible resource leak and make sure there's something to qsort()
authorAnatol Belski <ab@php.net>
Wed, 10 Jul 2013 11:00:47 +0000 (13:00 +0200)
committerAnatol Belski <ab@php.net>
Wed, 10 Jul 2013 11:00:47 +0000 (13:00 +0200)
main/streams/streams.c

index cb80e9a16b5fe96b6f7bd5dc14cc90ce9f00c048..a835c25d9ddb69b29874c540a5bd74a3b6e7981b 100644 (file)
@@ -2358,6 +2358,7 @@ PHPAPI int _php_stream_scandir(char *dirname, char **namelist[], int flags, php_
                        } else {
                                if(vector_size*2 < vector_size) {
                                        /* overflow */
+                                       php_stream_closedir(stream);
                                        efree(vector);
                                        return FAILURE;
                                }
@@ -2371,6 +2372,7 @@ PHPAPI int _php_stream_scandir(char *dirname, char **namelist[], int flags, php_
                nfiles++;
                if(vector_size < 10 || nfiles == 0) {
                        /* overflow */
+                       php_stream_closedir(stream);
                        efree(vector);
                        return FAILURE;
                }
@@ -2379,7 +2381,7 @@ PHPAPI int _php_stream_scandir(char *dirname, char **namelist[], int flags, php_
 
        *namelist = vector;
 
-       if (compare) {
+       if (nfiles > 0 && compare) {
                qsort(*namelist, nfiles, sizeof(char *), (int(*)(const void *, const void *))compare);
        }
        return nfiles;