? mapscript/csharp/Makefile
? mapscript/java/Makefile
? mapscript/python/mapscript.pyc
Index: maperror.h
===================================================================
RCS file: /data2/cvsroot/mapserver/maperror.h,v
retrieving revision 1.36
diff -U3 -r1.36 maperror.h
--- maperror.h	10 Nov 2006 01:30:44 -0000	1.36
+++ maperror.h	25 Feb 2007 13:15:01 -0000
@@ -96,7 +96,8 @@
 #define MS_TIMEERR 35
 #define MS_GMLERR 36
 #define MS_SOSERR 37
-#define MS_NUMERRORCODES 38
+#define MS_NULLPARENTERR 38
+#define MS_NUMERRORCODES 39
 
 #define MESSAGELENGTH 2048
 #define ROUTINELENGTH 64
Index: mapgraticule.c
===================================================================
RCS file: /data2/cvsroot/mapserver/mapgraticule.c,v
retrieving revision 1.18
diff -U3 -r1.18 mapgraticule.c
--- mapgraticule.c	16 Jan 2006 20:37:15 -0000	1.18
+++ mapgraticule.c	25 Feb 2007 13:15:31 -0000
@@ -200,6 +200,9 @@
 	int					 iAxisTickCount	= 0;
 	rectObj				 rectMapCoordinates;
 
+	if ( msCheckParentPointer(layer->map,"map")==MS_FAILURE )
+		return MS_FAILURE;
+
 	pInfo->dstartlatitude			= rect.miny;
 	pInfo->dstartlongitude			= rect.minx;
 	pInfo->dendlatitude				= rect.maxy;
@@ -686,6 +689,8 @@
         msSetError(MS_MISCERR, "Assertion failed: Null shape or layerinfo!, ", "_AdjustLabelPosition()");
 		return MS_FAILURE;
     }
+	if ( msCheckParentPointer(pLayer->map,"map")==MS_FAILURE )
+		return MS_FAILURE;
 	
 	ptPoint			= pShape->line->point[0];
 
Index: map.h
===================================================================
RCS file: /data2/cvsroot/mapserver/map.h,v
retrieving revision 1.472
diff -U3 -r1.472 map.h
--- map.h	22 Jan 2007 14:47:24 -0000	1.472
+++ map.h	25 Feb 2007 13:15:35 -0000
@@ -1853,6 +1853,8 @@
 
 MS_DLL_EXPORT int msAlphaBlend (int dst, int src);
 
+MS_DLL_EXPORT int msCheckParentPointer(void* p, char* objname);
+
 
 /* ==================================================================== */
 /*      End of prototypes for functions in maputil.c                    */
Index: mapjoin.c
===================================================================
RCS file: /data2/cvsroot/mapserver/mapjoin.c,v
retrieving revision 1.29
diff -U3 -r1.29 mapjoin.c
--- mapjoin.c	12 May 2006 18:32:41 -0000	1.29
+++ mapjoin.c	25 Feb 2007 13:15:44 -0000
@@ -188,6 +188,10 @@
   msDBFJoinInfo *joininfo;
 
   if(join->joininfo) return(MS_SUCCESS); /* already open */
+  
+  if ( msCheckParentPointer(layer->map,"map")==MS_FAILURE )
+	return MS_FAILURE;
+  
     
   /* allocate a msDBFJoinInfo struct */
   joininfo = (msDBFJoinInfo *) malloc(sizeof(msDBFJoinInfo));
@@ -345,6 +349,9 @@
   char buffer[MS_BUFFER_LENGTH];
 
   if(join->joininfo) return(MS_SUCCESS); /* already open */
+  if ( msCheckParentPointer(layer->map,"map")==MS_FAILURE )
+	return MS_FAILURE;
+  
     
   /* allocate a msCSVJoinInfo struct */
   if((joininfo = (msCSVJoinInfo *) malloc(sizeof(msCSVJoinInfo))) == NULL) {
Index: mapogcsld.c
===================================================================
RCS file: /data2/cvsroot/mapserver/mapogcsld.c,v
retrieving revision 1.79
diff -U3 -r1.79 mapogcsld.c
--- mapogcsld.c	13 Feb 2007 04:18:16 -0000	1.79
+++ mapogcsld.c	25 Feb 2007 13:16:19 -0000
@@ -3435,6 +3435,9 @@
     int nSize = 1;
     char *pszDashArray = NULL;
     char *pszGraphicSLD = NULL;
+    
+    if ( msCheckParentPointer(psLayer->map,"map")==MS_FAILURE )
+		return NULL;
 
     sprintf(szTmp, "%s\n",  "<LineSymbolizer>");
     pszSLD = strcatalloc(pszSLD, szTmp);
Index: mapprimitive.c
===================================================================
RCS file: /data2/cvsroot/mapserver/mapprimitive.c,v
retrieving revision 1.76
diff -U3 -r1.76 mapprimitive.c
--- mapprimitive.c	1 Sep 2006 18:03:19 -0000	1.76
+++ mapprimitive.c	25 Feb 2007 13:16:58 -0000
@@ -792,6 +792,9 @@
 void msOffsetPointRelativeTo(pointObj *point, layerObj *layer)
 {
   double x=0, y=0;
+  if ( msCheckParentPointer(layer->map,"map")==MS_FAILURE )
+	return;
+  
 
   if(layer->transform == MS_TRUE) return; /* nothing to do */
 
@@ -852,6 +855,9 @@
   double x=0, y=0;
 
   if(layer->transform == MS_TRUE) return; /* nothing to do */
+  if ( msCheckParentPointer(layer->map,"map")==MS_FAILURE )
+	return;
+  
 
   if(layer->units == MS_PERCENTAGES) {
     for (i=0; i<shape->numlines; i++) {
Index: mapraster.c
===================================================================
RCS file: /data2/cvsroot/mapserver/mapraster.c,v
retrieving revision 1.137
diff -U3 -r1.137 mapraster.c
--- mapraster.c	24 Sep 2006 02:42:12 -0000	1.137
+++ mapraster.c	25 Feb 2007 13:17:07 -0000
@@ -1395,9 +1395,11 @@
           tlp->filter.type = layer->filter.type;
       }
 
-    } else
-      tlp = &(layer->map->layers[tilelayerindex]);
-      
+    } else {
+    	if ( msCheckParentPointer(layer->map,"map")==MS_FAILURE )
+			return MS_FAILURE;
+      	tlp = &(layer->map->layers[tilelayerindex]);
+    }
     status = msLayerOpen(tlp);
     if(status != MS_SUCCESS)
     {
Index: maprasterquery.c
===================================================================
RCS file: /data2/cvsroot/mapserver/maprasterquery.c,v
retrieving revision 1.23
diff -U3 -r1.23 maprasterquery.c
--- maprasterquery.c	23 Jun 2006 20:39:19 -0000	1.23
+++ maprasterquery.c	25 Feb 2007 13:17:10 -0000
@@ -1397,6 +1397,8 @@
 /*      Otherwise we invoke the tileindex layers SetTimeFilter          */
 /*      method.                                                         */
 /* -------------------------------------------------------------------- */
+	if ( msCheckParentPointer(layer->map,"map")==MS_FAILURE )
+		return MS_FAILURE;
     return msLayerSetTimeFilter( layer->map->layers + tilelayerindex,
                                  timestring, timefield );
 }
Index: mapshape.c
===================================================================
RCS file: /data2/cvsroot/mapserver/mapshape.c,v
retrieving revision 1.73
diff -U3 -r1.73 mapshape.c
--- mapshape.c	12 Jul 2006 06:17:17 -0000	1.73
+++ mapshape.c	25 Feb 2007 13:17:49 -0000
@@ -1582,6 +1582,9 @@
   char *filename, tilename[MS_MAXPATHLEN], szPath[MS_MAXPATHLEN];
 
   msTiledSHPLayerInfo *tSHP=NULL;
+  
+  if ( msCheckParentPointer(layer->map,"map")==MS_FAILURE )
+	return MS_FAILURE;  
 
   /* allocate space for a shapefileObj using layer->layerinfo	 */
   tSHP = (msTiledSHPLayerInfo *) malloc(sizeof(msTiledSHPLayerInfo));
@@ -1668,6 +1671,9 @@
   char *filename, tilename[MS_MAXPATHLEN], szPath[MS_MAXPATHLEN];
 
   msTiledSHPLayerInfo *tSHP=NULL;
+  
+  if ( msCheckParentPointer(layer->map,"map")==MS_FAILURE )
+	return MS_FAILURE;
 
   tSHP = layer->layerinfo;
   if(!tSHP) {
@@ -1798,6 +1804,10 @@
   char **values=NULL;
 
   msTiledSHPLayerInfo *tSHP=NULL;
+  
+  if ( msCheckParentPointer(layer->map,"map")==MS_FAILURE )
+	return MS_FAILURE;
+  
 
   tSHP = layer->layerinfo;
   if(!tSHP) {
@@ -1949,6 +1959,10 @@
   char *filename, tilename[MS_MAXPATHLEN], szPath[MS_MAXPATHLEN];
 
   msTiledSHPLayerInfo *tSHP=NULL;
+  
+  if ( msCheckParentPointer(layer->map,"map")==MS_FAILURE )
+	return MS_FAILURE;
+  
 
   tSHP = layer->layerinfo;
   if(!tSHP) {
@@ -2002,6 +2016,8 @@
   
     if(tSHP->tilelayerindex != -1) {
       layerObj *tlp;
+	  if ( msCheckParentPointer(layer->map,"map")==MS_FAILURE )
+	    return;
       tlp = &(layer->map->layers[tSHP->tilelayerindex]);
       msLayerClose(tlp);
     } else { 
@@ -2156,6 +2172,9 @@
          /* layer already open */
         return(MS_SUCCESS);
     }
+    if ( msCheckParentPointer(layer->map,"map")==MS_FAILURE )
+		return MS_FAILURE;
+    
 
     /* allocate space for a shapefileObj using layer->layerinfo  */
     shpfile = (shapefileObj *) malloc(sizeof(shapefileObj));
Index: maptemplate.c
===================================================================
RCS file: /data2/cvsroot/mapserver/maptemplate.c,v
retrieving revision 1.124
diff -U3 -r1.124 maptemplate.c
--- maptemplate.c	19 Dec 2006 18:58:05 -0000	1.124
+++ maptemplate.c	25 Feb 2007 13:18:12 -0000
@@ -1101,6 +1101,9 @@
     msSetError(MS_WEBERR, "Invalid line pointer.", "processCoords()");
     return(MS_FAILURE);
   }
+  if ( msCheckParentPointer(layer->map,"map")==MS_FAILURE )
+	return MS_FAILURE;
+  
 
   tagStart = findTag(*line, "shpxy");
 
Index: maputil.c
===================================================================
RCS file: /data2/cvsroot/mapserver/maputil.c,v
retrieving revision 1.191
diff -U3 -r1.191 maputil.c
--- maputil.c	22 Jan 2007 14:47:24 -0000	1.191
+++ maputil.c	25 Feb 2007 13:18:22 -0000
@@ -1409,3 +1409,26 @@
 /* -------------------------------------------------------------------- */
     return ((alpha << 24) + (red << 16) + (green << 8) + blue);
 }
+
+/*
+ RFC 24: check if the parent pointer is NULL and raise an error otherwise
+*/
+int msCheckParentPointer(void* p, char *objname) {
+	char* fmt="The %s parent object is null";
+	char* msg=NULL;
+	if (p == NULL) {
+		if(objname != NULL) {
+			msg=malloc( sizeof(char) * ( ( strlen(fmt)+strlen(objname) ) ) );
+			if(msg == NULL) {
+				msg="A required parent object is null";
+			} else {
+				sprintf(msg, "The %s parent object is null", objname);
+			}
+		} else {
+			msg="A required parent object is null";
+		}
+		msSetError(MS_NULLPARENTERR, msg, "");
+		return MS_FAILURE;
+	}
+	return MS_SUCCESS;
+}
Index: mapwcs.c
===================================================================
RCS file: /data2/cvsroot/mapserver/mapwcs.c,v
retrieving revision 1.74
diff -U3 -r1.74 mapwcs.c
--- mapwcs.c	13 Feb 2007 04:39:07 -0000	1.74
+++ mapwcs.c	25 Feb 2007 13:18:26 -0000
@@ -834,7 +834,11 @@
   coverageMetadataObj cm;
   int i, status;
 
+  if ( msCheckParentPointer(layer->map,"map")==MS_FAILURE )
+	return MS_FAILURE;
+
   if(!msWCSIsLayerSupported(layer)) return MS_SUCCESS; /* not an error, this layer cannot be served via WCS */
+  
 
   status = msWCSGetCoverageMetadata(layer, &cm);
   if(status != MS_SUCCESS) return MS_FAILURE;
@@ -1436,6 +1440,9 @@
 #ifdef USE_WCS_SVR
 static int msWCSGetCoverageMetadata( layerObj *layer, coverageMetadataObj *cm )
 {
+  if ( msCheckParentPointer(layer->map,"map")==MS_FAILURE )
+	return MS_FAILURE;
+
   /* get information that is "data" independent */
   if((cm->srs = msOWSGetEPSGProj(&(layer->projection), &(layer->metadata), "COM", MS_TRUE)) == NULL) {
     if((cm->srs = msOWSGetEPSGProj(&(layer->map->projection), &(layer->map->web.metadata), "COM", MS_TRUE)) == NULL) {
Index: mapwfslayer.c
===================================================================
RCS file: /data2/cvsroot/mapserver/mapwfslayer.c,v
retrieving revision 1.37
diff -U3 -r1.37 mapwfslayer.c
--- mapwfslayer.c	19 May 2006 20:53:27 -0000	1.37
+++ mapwfslayer.c	25 Feb 2007 13:18:33 -0000
@@ -842,6 +842,9 @@
 #ifdef USE_WFS_LYR
     int status = MS_SUCCESS;
     msWFSLayerInfo *psInfo = NULL;
+    
+    if ( msCheckParentPointer(lp->map,"map")==MS_FAILURE )
+		return MS_FAILURE;
 
     if (lp->wfslayerinfo != NULL)
     {
@@ -1002,6 +1005,10 @@
     int status = MS_SUCCESS;
     const char *pszTmp;
     FILE *fp;
+    
+    if ( msCheckParentPointer(lp->map,"map")==MS_FAILURE )
+		return MS_FAILURE;
+    
 
     psInfo =(msWFSLayerInfo*)lp->wfslayerinfo;
 
Index: mapscript/mserror.i
===================================================================
RCS file: /data2/cvsroot/mapserver/mapscript/mserror.i,v
retrieving revision 1.3
diff -U3 -r1.3 mserror.i
--- mapscript/mserror.i	16 Mar 2006 22:30:29 -0000	1.3
+++ mapscript/mserror.i	25 Feb 2007 13:21:39 -0000
@@ -56,6 +56,9 @@
             case MS_CHILDERR:
                 SWIG_exception(SWIG_SystemError,ms_message);
                 break;
+            case MS_NULLPARENTERR:
+                SWIG_exception(SWIG_SystemError,ms_message);
+                break;
             default:
                 SWIG_exception(SWIG_UnknownError,ms_message);
                 break;

