wez             Mon Jul 26 21:59:44 2004 EDT

  Modified files:              
    /php-src/ext/com_dotnet     com_handlers.c 
  Log:
  Fix #29392 COM behaved badly for non-existant methods
  
  
http://cvs.php.net/diff.php/php-src/ext/com_dotnet/com_handlers.c?r1=1.22&r2=1.23&ty=u
Index: php-src/ext/com_dotnet/com_handlers.c
diff -u php-src/ext/com_dotnet/com_handlers.c:1.22 
php-src/ext/com_dotnet/com_handlers.c:1.23
--- php-src/ext/com_dotnet/com_handlers.c:1.22  Tue May  4 11:03:48 2004
+++ php-src/ext/com_dotnet/com_handlers.c       Mon Jul 26 21:59:44 2004
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: com_handlers.c,v 1.22 2004/05/04 15:03:48 wez Exp $ */
+/* $Id: com_handlers.c,v 1.23 2004/07/27 01:59:44 wez Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -307,6 +307,8 @@
                f.fn_flags = 0;
                f.function_name = estrndup(name, len);
 
+               fptr = &f;
+               
                if (obj->typeinfo) {
                        /* look for byref params */
                        ITypeComp *comp;
@@ -346,6 +348,11 @@
                                                case DESCKIND_TYPECOMP:
                                                        
ITypeComp_Release(bindptr.lptcomp);
                                                        break;
+
+                                               case DESCKIND_NONE:
+                                               default:
+                                                       fptr = NULL;
+                                                       break;
                                        }
                                        if (TI) {
                                                ITypeInfo_Release(TI);
@@ -356,21 +363,27 @@
                        }
                }
 
-               /* save this method in the cache */
-               if (!obj->method_cache) {
-                       ALLOC_HASHTABLE(obj->method_cache);
-                       zend_hash_init(obj->method_cache, 2, NULL, function_dtor, 0);
-               }
+               if (fptr) {
+                       /* save this method in the cache */
+                       if (!obj->method_cache) {
+                               ALLOC_HASHTABLE(obj->method_cache);
+                               zend_hash_init(obj->method_cache, 2, NULL, 
function_dtor, 0);
+                       }
 
-               zend_hash_update(obj->method_cache, name, len, &f, sizeof(f), 
(void**)&fptr);
+                       zend_hash_update(obj->method_cache, name, len, &f, sizeof(f), 
(void**)&fptr);
+               }
        }
 
-       /* duplicate this into a new chunk of emalloc'd memory,
-        * since the engine will efree it */
-       func = emalloc(sizeof(*fptr));
-       memcpy(func, fptr, sizeof(*fptr));
+       if (fptr) {
+               /* duplicate this into a new chunk of emalloc'd memory,
+                * since the engine will efree it */
+               func = emalloc(sizeof(*fptr));
+               memcpy(func, fptr, sizeof(*fptr));
+
+               return func;
+       }
 
-       return func;
+       return NULL;
 }
 
 static int com_call_method(char *method, INTERNAL_FUNCTION_PARAMETERS)

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

Reply via email to