]> granicus.if.org Git - php/commitdiff
Fixed a possible memory corruption inside mime_content_type() on a
authorIlia Alshanetsky <iliaa@php.net>
Thu, 15 Feb 2007 00:05:42 +0000 (00:05 +0000)
committerIlia Alshanetsky <iliaa@php.net>
Thu, 15 Feb 2007 00:05:42 +0000 (00:05 +0000)
non-existent file.

ext/mime_magic/mime_magic.c

index b105d7b3f1c42fd72bc40568bed0c7cc5f983d53..cb7be9950b51cc0d2181a21c5c1b49f1f412bed7 100644 (file)
@@ -1156,21 +1156,29 @@ static int fsmagic(zval *what TSRMLS_DC)
        php_stream_statbuf stat_ssb;
 
        switch (Z_TYPE_P(what)) {
-       case IS_STRING:
-               if(!php_stream_stat_path(Z_STRVAL_P(what), &stat_ssb)) {
-                       return MIME_MAGIC_OK;
-               }
-               break;
-       case IS_RESOURCE:
-               {
-                       php_stream *stream;
-
-                       php_stream_from_zval_no_verify(stream, &what);
-                       if(!php_stream_stat(stream, &stat_ssb)) {
-                               return MIME_MAGIC_OK;
+               case IS_STRING:
+                       if (php_stream_stat_path_ex(Z_STRVAL_P(what), PHP_STREAM_URL_STAT_QUIET, &stat_ssb, NULL)) {
+                               if (MIME_MAGIC_G(debug)) {
+                                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "Non-statable file path (%s)", Z_STRVAL_P(what));
+                               }
+                               return MIME_MAGIC_ERROR;
                        }
-               }
-               break;
+                       break;
+               case IS_RESOURCE:
+                       {
+                               php_stream *stream;
+       
+                               php_stream_from_zval_no_verify(stream, &what);
+                               if (php_stream_stat(stream, &stat_ssb)) {
+                                       if (MIME_MAGIC_G(debug)) {
+                                               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Non-statable file path (%s)", Z_STRVAL_P(what));
+                                       }
+                                       return MIME_MAGIC_ERROR;
+                               }
+                       }
+                       break;
+               default:
+                       return MIME_MAGIC_OK;
        }
 
     switch (stat_ssb.sb.st_mode & S_IFMT) {