dmitry          Fri Jun 15 07:27:08 2007 UTC

  Modified files:              (Branch: PHP_5_2)
    /php-src/main       main.c 
  Log:
  Prevent crash in case of wrong arguments to CRT functions (strftime()) on PHP 
complead by MS VC2005
  
  
http://cvs.php.net/viewvc.cgi/php-src/main/main.c?r1=1.640.2.23.2.36&r2=1.640.2.23.2.37&diff_format=u
Index: php-src/main/main.c
diff -u php-src/main/main.c:1.640.2.23.2.36 php-src/main/main.c:1.640.2.23.2.37
--- php-src/main/main.c:1.640.2.23.2.36 Thu Jun  7 08:44:41 2007
+++ php-src/main/main.c Fri Jun 15 07:27:08 2007
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: main.c,v 1.640.2.23.2.36 2007/06/07 08:44:41 tony2001 Exp $ */
+/* $Id: main.c,v 1.640.2.23.2.37 2007/06/15 07:27:08 dmitry Exp $ */
 
 /* {{{ includes
  */
@@ -1424,6 +1424,36 @@
 }
 /* }}} */
 
+#if defined(PHP_WIN32) && defined(_MSC_VER) && (_MSC_VER >= 1400)
+static _invalid_parameter_handler old_invalid_parameter_handler;
+
+void dummy_invalid_parameter_handler(
+               const wchar_t *expression,
+               const wchar_t *function,
+               const wchar_t *file,
+               unsigned int   line,
+               uintptr_t      pEwserved)
+{
+       static int called = 0;
+       char buf[1024];
+       int len;
+
+       if (!called) {
+               called = 1;
+               if (function) {
+                       if (file) {
+                               len = _snprintf(buf, sizeof(buf)-1, "Invalid 
parameter detected in CRT function '%ws' (%ws:%d)", function, file, line);
+                       } else {
+                               len = _snprintf(buf, sizeof(buf)-1, "Invalid 
parameter detected in CRT function '%ws'", function);
+                       }
+               } else {
+                       len = _snprintf(buf, sizeof(buf)-1, "Invalid CRT 
parameters detected");
+               }
+               zend_error(E_WARNING, "%s", buf);
+               called = 0;
+       }
+}
+#endif
 
 /* {{{ php_module_startup
  */
@@ -1454,6 +1484,13 @@
                        php_os="WIN32";
                }
        }
+#if defined(_MSC_VER) && (_MSC_VER >= 1400)
+       old_invalid_parameter_handler =
+               _set_invalid_parameter_handler(dummy_invalid_parameter_handler);
+       if (old_invalid_parameter_handler != NULL) {
+               _set_invalid_parameter_handler(old_invalid_parameter_handler);
+       }
+#endif
 #else
        php_os=PHP_OS;
 #endif
@@ -1707,6 +1744,12 @@
        php_shutdown_temporary_directory();
 
        module_initialized = 0;
+
+#if defined(PHP_WIN32) && defined(_MSC_VER) && (_MSC_VER >= 1400)
+       if (old_invalid_parameter_handler == NULL) {
+               _set_invalid_parameter_handler(old_invalid_parameter_handler);
+       }
+#endif
 }
 /* }}} */
 

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to