Advertisement
eromang

PHP 5.4.5 CVE-2012-2688 _php_stream_scandir overflow

Jul 20th, 2012
833
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Diff 1.05 KB | None | 0 0
  1. diff -Naur php-5.4.4/main/streams/streams.c php-5.4.5/main/streams/streams.c
  2. --- php-5.4.4/main/streams/streams.c    2012-06-13 06:54:23.000000000 +0200
  3. +++ php-5.4.5/main/streams/streams.c    2012-07-18 08:19:16.000000000 +0200
  4. @@ -2332,8 +2332,8 @@
  5.     php_stream *stream;
  6.     php_stream_dirent sdp;
  7.     char **vector = NULL;
  8. -   int vector_size = 0;
  9. -   int nfiles = 0;
  10. +   unsigned int vector_size = 0;
  11. +   unsigned int nfiles = 0;
  12.  
  13.     if (!namelist) {
  14.         return FAILURE;
  15. @@ -2349,14 +2349,24 @@
  16.             if (vector_size == 0) {
  17.                 vector_size = 10;
  18.             } else {
  19. +               if(vector_size*2 < vector_size) {
  20. +                   /* overflow */
  21. +                   efree(vector);
  22. +                   return FAILURE;
  23. +               }
  24.                 vector_size *= 2;
  25.             }
  26. -           vector = (char **) erealloc(vector, vector_size * sizeof(char *));
  27. +           vector = (char **) safe_erealloc(vector, vector_size, sizeof(char *), 0);
  28.         }
  29.  
  30.         vector[nfiles] = estrdup(sdp.d_name);
  31.  
  32.         nfiles++;
  33. +       if(vector_size < 10 || nfiles == 0) {
  34. +           /* overflow */
  35. +           efree(vector);
  36. +           return FAILURE;
  37. +       }
  38.     }
  39.     php_stream_closedir(stream);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement