[mapserver-commits] r11295 - trunk/mapserver/mapscript/php

svn at osgeo.org svn at osgeo.org
Mon Mar 21 13:41:19 EDT 2011


Author: aboudreault
Date: 2011-03-21 10:41:19 -0700 (Mon, 21 Mar 2011)
New Revision: 11295

Modified:
   trunk/mapserver/mapscript/php/class.c
   trunk/mapserver/mapscript/php/layer.c
   trunk/mapserver/mapscript/php/map.c
   trunk/mapserver/mapscript/php/php_mapscript_util.c
   trunk/mapserver/mapscript/php/php_mapscript_util.h
Log:
Mapscript Seg Fault on mapObj->getMetaData()

Modified: trunk/mapserver/mapscript/php/class.c
===================================================================
--- trunk/mapserver/mapscript/php/class.c	2011-03-21 15:44:55 UTC (rev 11294)
+++ trunk/mapserver/mapscript/php/class.c	2011-03-21 17:41:19 UTC (rev 11295)
@@ -511,6 +511,7 @@
     PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
     
     php_class = (php_class_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+    CHECK_OBJECT(mapscript_ce_hashtable, php_class->metadata, &php_class->class->metadata);
     
     args[0] = zname; 
     MAPSCRIPT_CALL_METHOD(php_class->metadata, "get", retval, 1, args);
@@ -539,6 +540,7 @@
     PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
     
     php_class = (php_class_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+    CHECK_OBJECT(mapscript_ce_hashtable, php_class->metadata, &php_class->class->metadata);
     
     args[0] = zname; 
     args[1] = zvalue; 
@@ -568,6 +570,7 @@
     PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
     
     php_class = (php_class_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+    CHECK_OBJECT(mapscript_ce_hashtable, php_class->metadata, &php_class->class->metadata);
     
     args[0] = zname; 
     MAPSCRIPT_CALL_METHOD(php_class->metadata, "remove", retval, 1, args);

Modified: trunk/mapserver/mapscript/php/layer.c
===================================================================
--- trunk/mapserver/mapscript/php/layer.c	2011-03-21 15:44:55 UTC (rev 11294)
+++ trunk/mapserver/mapscript/php/layer.c	2011-03-21 17:41:19 UTC (rev 11295)
@@ -1175,8 +1175,9 @@
     PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
     
     php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC);
-    
-    args[0] = zname; 
+    CHECK_OBJECT(mapscript_ce_hashtable, php_layer->metadata, &php_layer->layer->metadata);
+
+    args[0] = zname;
     MAPSCRIPT_CALL_METHOD(php_layer->metadata, "get", retval, 1, args);
 
     RETURN_STRING(Z_STRVAL(retval),1);
@@ -1203,6 +1204,7 @@
     PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
     
     php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+    CHECK_OBJECT(mapscript_ce_hashtable, php_layer->metadata, &php_layer->layer->metadata);
     
     args[0] = zname; 
     args[1] = zvalue; 
@@ -1232,6 +1234,7 @@
     PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
     
     php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+    CHECK_OBJECT(mapscript_ce_hashtable, php_layer->metadata, &php_layer->layer->metadata);
     
     args[0] = zname; 
     MAPSCRIPT_CALL_METHOD(php_layer->metadata, "remove", retval, 1, args);

Modified: trunk/mapserver/mapscript/php/map.c
===================================================================
--- trunk/mapserver/mapscript/php/map.c	2011-03-21 15:44:55 UTC (rev 11294)
+++ trunk/mapserver/mapscript/php/map.c	2011-03-21 17:41:19 UTC (rev 11295)
@@ -2204,6 +2204,7 @@
     PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
     
     php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+    CHECK_OBJECT(mapscript_ce_hashtable, php_map->metadata, &php_map->map->web.metadata);
     
     args[0] = zname; 
     MAPSCRIPT_CALL_METHOD(php_map->metadata, "get", retval, 1, args);
@@ -2232,6 +2233,7 @@
     PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
     
     php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+    CHECK_OBJECT(mapscript_ce_hashtable, php_map->metadata, &php_map->map->web.metadata);
     
     args[0] = zname; 
     args[1] = zvalue; 
@@ -2261,6 +2263,7 @@
     PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
     
     php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+    CHECK_OBJECT(mapscript_ce_hashtable, php_map->metadata, &php_map->map->web.metadata);
     
     args[0] = zname; 
     MAPSCRIPT_CALL_METHOD(php_map->metadata, "remove", retval, 1, args);

Modified: trunk/mapserver/mapscript/php/php_mapscript_util.c
===================================================================
--- trunk/mapserver/mapscript/php/php_mapscript_util.c	2011-03-21 15:44:55 UTC (rev 11294)
+++ trunk/mapserver/mapscript/php/php_mapscript_util.c	2011-03-21 17:41:19 UTC (rev 11295)
@@ -152,8 +152,10 @@
     MAPSCRIPT_ADDREF(*php_object_storage);
 
     // return a reference to the object
-    zval_ptr_dtor(*return_value_ptr);
-    zval_set_isref_p(*php_object_storage);
-    **return_value_ptr = *php_object_storage;
+    if (return_value_ptr) {
+        zval_ptr_dtor(*return_value_ptr);
+        zval_set_isref_p(*php_object_storage);
+        **return_value_ptr = *php_object_storage;
+    }
 }
 

Modified: trunk/mapserver/mapscript/php/php_mapscript_util.h
===================================================================
--- trunk/mapserver/mapscript/php/php_mapscript_util.h	2011-03-21 15:44:55 UTC (rev 11294)
+++ trunk/mapserver/mapscript/php/php_mapscript_util.h	2011-03-21 17:41:19 UTC (rev 11295)
@@ -131,6 +131,12 @@
         return;                                                         \
     } 
 
+#define CHECK_OBJECT(mapscript_ce, php_object_storage, internal_object) \
+    if (!php_object_storage) {                                          \
+        mapscript_fetch_object(mapscript_ce, zobj, NULL, (void*)internal_object, \
+                           &php_object_storage, NULL TSRMLS_CC); \
+    }
+
 /* helpers for setters */
 #define IF_SET_STRING(property_name, internal, value)        \
     if (strcmp(property, property_name)==0)                  \



More information about the mapserver-commits mailing list