Graphics: return a null pointer in C when property does not exist 40/12640/4
Calixte DENIZET [Mon, 23 Sep 2013 16:28:16 +0000 (18:28 +0200)]
Change-Id: I272ea94714b09776b207cdfe464b200dbaa4aafb

21 files changed:
scilab/modules/graphic_objects/src/cpp/getGraphicObjectProperty.cpp
scilab/modules/graphic_objects/src/java/org/scilab/modules/graphic_objects/CallGraphicController.java
scilab/modules/graphics/src/c/GetProperty.c
scilab/modules/graphics/src/c/getHandleProperty/get_box_property.c
scilab/modules/graphics/src/c/getHandleProperty/get_children_property.c
scilab/modules/graphics/src/c/getHandleProperty/get_data_bounds_property.c
scilab/modules/graphics/src/c/getHandleProperty/get_data_property.c
scilab/modules/graphics/src/c/getHandleProperty/get_figure_closerequestfcn_property.c
scilab/modules/graphics/src/c/getHandleProperty/get_figure_resizefcn_property.c
scilab/modules/graphics/src/c/getHandleProperty/get_grid_property.c
scilab/modules/graphics/src/c/getHandleProperty/get_log_flags_property.c
scilab/modules/graphics/src/c/getHandleProperty/get_position_property.c
scilab/modules/graphics/src/c/getHandleProperty/get_segs_color_property.c
scilab/modules/graphics/src/c/getHandleProperty/get_sub_tics_property.c
scilab/modules/graphics/src/c/getHandleProperty/get_title_property.c
scilab/modules/graphics/src/c/getHandleProperty/get_triangles_property.c
scilab/modules/graphics/src/c/getHandleProperty/get_type_property.c
scilab/modules/graphics/src/c/getHandleProperty/get_user_data_property.c
scilab/modules/graphics/src/c/getHandleProperty/get_xtics_coord_property.c
scilab/modules/graphics/src/c/getHandleProperty/get_ytics_coord_property.c
scilab/modules/graphics/src/c/getHandleProperty/get_z_ticks_property.c

index 7801420..a32d3d7 100644 (file)
@@ -94,7 +94,17 @@ void getGraphicObjectProperty(char const* _pstID, int _iName, _ReturnType_ _retu
             }
             case jni_double:
             {
-                ((double *)*_pvData)[0] = (double)CallGraphicController::getGraphicObjectPropertyAsDouble(getScilabJavaVM(), _pstID, _iName);
+               double * ret = CallGraphicController::getGraphicObjectPropertyAsDoubleVector(getScilabJavaVM(), _pstID, _iName);
+               if (ret == NULL)
+               {
+                   *_pvData = NULL;
+               }
+               else
+               {
+                   ((double *)*_pvData)[0] = *ret;
+                   delete[] ret;
+               }
+
                 return;
             }
             case jni_double_vector:
@@ -104,7 +114,17 @@ void getGraphicObjectProperty(char const* _pstID, int _iName, _ReturnType_ _retu
             }
             case jni_bool:
             {
-                ((int *)*_pvData)[0] = (int)CallGraphicController::getGraphicObjectPropertyAsBoolean(getScilabJavaVM(), _pstID, _iName);
+               int * ret = CallGraphicController::getGraphicObjectPropertyAsBooleanVector(getScilabJavaVM(), _pstID, _iName);
+               if (ret == NULL)
+               {
+                   *_pvData = NULL;
+               }
+               else
+               {
+                   ((int *)*_pvData)[0] = *ret;
+                   delete[] ret;
+               }
+
                 return;
             }
             case jni_bool_vector:
@@ -114,7 +134,17 @@ void getGraphicObjectProperty(char const* _pstID, int _iName, _ReturnType_ _retu
             }
             case jni_int:
             {
-                ((int *)*_pvData)[0] = CallGraphicController::getGraphicObjectPropertyAsInteger(getScilabJavaVM(), _pstID, _iName);
+               int * ret = CallGraphicController::getGraphicObjectPropertyAsIntegerVector(getScilabJavaVM(), _pstID, _iName);
+               if (ret == NULL)
+               {
+                   *_pvData = NULL;
+               }
+               else
+               {
+                   ((int *)*_pvData)[0] = *ret;
+                   delete[] ret;
+               }
+
                 return;
             }
             case jni_int_vector:
index b46edfe..4ce66e2 100644 (file)
@@ -117,18 +117,24 @@ public final class CallGraphicController {
     }
 
     public static double[] getGraphicObjectPropertyAsDoubleVector(String id, int propertyName) {
-        Double[] tmp = (Double[]) getGraphicObjectProperty(id, propertyName);
+       Object ret = getGraphicObjectProperty(id, propertyName);
+       double[] result = null;
 
-        if (tmp == null) {
+        if (ret == null) {
             return null;
         }
 
-        double[] result = new double[tmp.length];
-
-        for (int i = 0; i < result.length; i++) {
-            result[i] = tmp[i];
-        }
-
+       if (ret instanceof Double[]) {
+           Double[] tmp = (Double[]) ret;
+           result = new double[tmp.length];
+           
+           for (int i = 0; i < result.length; i++) {
+               result[i] = tmp[i];
+           }
+       } else if (ret instanceof Double) {
+           result = new double[] { (Double) ret};
+       }
+           
         return result;
     }
 
@@ -137,18 +143,24 @@ public final class CallGraphicController {
     }
 
     public static int[] getGraphicObjectPropertyAsIntegerVector(String id, int propertyName) {
-        Integer[] tmp = (Integer[]) getGraphicObjectProperty(id, propertyName);
+       Object ret = getGraphicObjectProperty(id, propertyName);
+       int[] result = null;
 
-        if (tmp == null) {
+        if (ret == null) {
             return null;
         }
 
-        int[] result = new int[tmp.length];
-
-        for (int i = 0; i < result.length; i++) {
-            result[i] = tmp[i];
-        }
-
+       if (ret instanceof Integer[]) {
+           Integer[] tmp = (Integer[]) ret;
+           result = new int[tmp.length];
+           
+           for (int i = 0; i < result.length; i++) {
+               result[i] = tmp[i];
+           }
+       } else if (ret instanceof Integer) {
+           result = new int[] { (Integer) ret};
+       }
+           
         return result;
     }
 
@@ -163,17 +175,22 @@ public final class CallGraphicController {
     }
 
     public static int[] getGraphicObjectPropertyAsBooleanVector(String id, int propertyName) {
-        Boolean[] tmp = (Boolean[]) getGraphicObjectProperty(id, propertyName);
+       Object ret = getGraphicObjectProperty(id, propertyName);
+       int[] result = null;
 
-        if (tmp == null) {
+        if (ret == null) {
             return null;
         }
 
-        int[] result = new int[tmp.length];
-
-        for (int i = 0; i < result.length; i++) {
-            result[i] = tmp[i] ? 1 : 0;
-        }
+       if (ret instanceof Boolean[]) {
+           Boolean[] tmp = (Boolean[]) getGraphicObjectProperty(id, propertyName);
+           result = new int[tmp.length];
+           for (int i = 0; i < result.length; i++) {
+               result[i] = tmp[i] ? 1 : 0;
+           }
+       } else if (ret instanceof Boolean) {
+           result = new int[] { ((Boolean) ret) ? 1 : 0};
+       }
 
         return result;
     }
index 211b0ab..85a83f7 100644 (file)
@@ -143,7 +143,7 @@ double *sciGetPoint(char * pthis, int *numrow, int *numcol)
 
             *numrow = 2;
             *numcol = 2;
-            if ((tab = CALLOC((*numrow) * (*numcol), sizeof(double))) == NULL)
+            if ((tab = (double*)CALLOC((*numrow) * (*numcol), sizeof(double))) == NULL)
             {
                 *numrow = -1;
                 *numcol = -1;
@@ -215,7 +215,7 @@ double *sciGetPoint(char * pthis, int *numrow, int *numcol)
             if (*numcol == 2 && iView)
             {
                 *numcol = (*numcol) + 1; /* colonne de 0. a prendre en compte / afficher => numcol+1*/
-                if ((tab = CALLOC((*numrow) * (*numcol), sizeof(double))) == NULL)
+                if ((tab = (double*)CALLOC((*numrow) * (*numcol), sizeof(double))) == NULL)
                 {
                     *numrow = -1;
                     *numcol = -1;
@@ -231,7 +231,7 @@ double *sciGetPoint(char * pthis, int *numrow, int *numcol)
             }
             else
             {
-                if ((tab = CALLOC((*numrow) * (*numcol), sizeof(double))) == NULL)
+                if ((tab = (double*)CALLOC((*numrow) * (*numcol), sizeof(double))) == NULL)
                 {
                     *numrow = -1;
                     *numcol = -1;
@@ -274,7 +274,7 @@ double *sciGetPoint(char * pthis, int *numrow, int *numcol)
 
             *numcol = iView ? 5 : 4;
 
-            if ((tab = CALLOC((*numrow) * (*numcol), sizeof(double))) == NULL)
+            if ((tab = (double*)CALLOC((*numrow) * (*numcol), sizeof(double))) == NULL)
             {
                 *numrow = -1;
                 *numcol = -1;
@@ -326,7 +326,7 @@ double *sciGetPoint(char * pthis, int *numrow, int *numcol)
 
             *numcol = view ? 7 : 6;
 
-            if ((tab = CALLOC((*numrow) * (*numcol), sizeof(double))) == NULL)
+            if ((tab = (double*)CALLOC((*numrow) * (*numcol), sizeof(double))) == NULL)
             {
                 *numrow = -1;
                 *numcol = -1;
@@ -380,7 +380,7 @@ double *sciGetPoint(char * pthis, int *numrow, int *numcol)
 
             *numcol = iView ? 3 : 2;
 
-            if ((tab = CALLOC((*numrow) * (*numcol), sizeof(double))) == NULL)
+            if ((tab = (double*)CALLOC((*numrow) * (*numcol), sizeof(double))) == NULL)
             {
                 *numrow = -1;
                 *numcol = -1;
@@ -428,7 +428,7 @@ double *sciGetPoint(char * pthis, int *numrow, int *numcol)
                 *numcol = 3;
             }
 
-            if ((tab = CALLOC(2 * (*numrow) * (*numcol), sizeof(double))) == NULL)
+            if ((tab = (double*)CALLOC(2 * (*numrow) * (*numcol), sizeof(double))) == NULL)
             {
                 *numrow = -1;
                 *numcol = -1;
@@ -482,7 +482,7 @@ double *sciGetPoint(char * pthis, int *numrow, int *numcol)
             *numrow = ny;
             *numcol = nx;
 
-            if ((tab = CALLOC(nx * ny, sizeof(double))) == NULL)
+            if ((tab = (double*)CALLOC(nx * ny, sizeof(double))) == NULL)
             {
                 *numrow = -1;
                 *numcol = -1;
@@ -510,7 +510,7 @@ double *sciGetPoint(char * pthis, int *numrow, int *numcol)
             getGraphicObjectProperty(pthis, __GO_DATA_MODEL_NUM_VERTICES__, jni_int, (void**)&piTmp);
             *numrow = iTmp;
 
-            if ((tab = CALLOC(*numrow * 3, sizeof(double))) == NULL)
+            if ((tab = (double*)CALLOC(*numrow * 3, sizeof(double))) == NULL)
             {
                 *numrow = -1;
                 *numcol = -1;
index e9022ca..6da74df 100644 (file)
@@ -39,6 +39,13 @@ int get_box_property(void* _pvCtx, char* pobjUID)
 
     getGraphicObjectProperty(pobjUID, __GO_TYPE__, jni_int, (void **) &piType);
 
+    if (piType == NULL)
+    {
+        Scierror(999, _("'%s' property does not exist for this handle.\n"), "type");
+        return -1;
+    }
+
+
     /*
     * Required since the Box property is implemented differently for the Axes and Text
     * objects (respectively as an Integer and a Boolean).
index 0784852..c9d8970 100644 (file)
@@ -50,8 +50,7 @@ int get_children_property(void* _pvCtx, char* pobjUID)
     int *piChildrenCount = &iChildrenCount;
 
     getGraphicObjectProperty(pobjUID, __GO_CHILDREN_COUNT__, jni_int, (void **)&piChildrenCount);
-
-    if (piChildrenCount[0] == 0)
+    if (piChildrenCount == NULL || piChildrenCount[0] == 0)
     {
         // No Child
         return sciReturnEmptyMatrix(_pvCtx);
index b75253f..ce4c18d 100644 (file)
@@ -44,6 +44,11 @@ int get_data_bounds_property(void* _pvCtx, char* pobjUID)
     }
 
     getGraphicObjectProperty(pobjUID, __GO_VIEW__, jni_int, (void **)&piView);
+    if (piView == NULL)
+    {
+        Scierror(999, _("'%s' property does not exist for this handle.\n"), "view");
+        return -1;
+    }
 
     /**DJ.Abdemouche 2003**/
     if (iView == 1)
index 709a276..de088b6 100644 (file)
@@ -347,6 +347,11 @@ int get_data_property(void* _pvCtx, char* pobjUID)
     int *piType = &type;
 
     getGraphicObjectProperty(pobjUID, __GO_TYPE__, jni_int, (void **)&piType);
+    if (piType == NULL)
+    {
+        Scierror(999, _("'%s' property does not exist for this handle.\n"), "type");
+        return -1;
+    }
 
     switch (type)
     {
index ff90187..bd6759d 100644 (file)
@@ -29,10 +29,9 @@ int get_figure_closerequestfcn_property(void* _pvCtx, char* pobjUID)
     int *piType = &iType;
 
     getGraphicObjectProperty(pobjUID, __GO_TYPE__, jni_int, (void **)&piType);
-
-    if (iType != __GO_FIGURE__)
+    if (piType == NULL || iType != __GO_FIGURE__)
     {
-        Scierror(999, _("'%s' property does not exist for this handle.\n"), "closerequestfcn");
+        Scierror(999, _("'%s' property does not exist for this handle.\n"), "type");
         return -1;
     }
 
index 8241d09..f7afb5e 100644 (file)
@@ -30,7 +30,7 @@ int get_figure_resizefcn_property(void* _pvCtx, char* pobjUID)
 
     getGraphicObjectProperty(pobjUID, __GO_TYPE__, jni_int, (void **)&piType);
 
-    if (iType != __GO_FIGURE__)
+    if (piType == NULL || iType != __GO_FIGURE__)
     {
         Scierror(999, _("'%s' property does not exist for this handle.\n"), "resizefcn");
         return -1;
index f93ec99..850322a 100644 (file)
@@ -50,9 +50,21 @@ int get_grid_property(void* _pvCtx, char* pobjUID)
     grid[0] = (double) iGridColor;
 
     getGraphicObjectProperty(pobjUID, __GO_Y_AXIS_GRID_COLOR__, jni_int, (void **)&piGridColor);
+    if (piGridColor == NULL)
+    {
+        Scierror(999, _("'%s' property does not exist for this handle.\n"), "grid");
+        return -1;
+    }
+
     grid[1] = (double) iGridColor;
 
     getGraphicObjectProperty(pobjUID, __GO_Z_AXIS_GRID_COLOR__, jni_int, (void **)&piGridColor);
+    if (piGridColor == NULL)
+    {
+        Scierror(999, _("'%s' property does not exist for this handle.\n"), "grid");
+        return -1;
+    }
+
     grid[2] = (double) iGridColor;
 
     getGraphicObjectProperty(pobjUID, __GO_VIEW__, jni_int, (void **)&piView);
index 78958b1..1486deb 100644 (file)
@@ -48,9 +48,21 @@ int get_log_flags_property(void* _pvCtx, char* pobjUID)
     logFlags[0] = iLogFlag;
 
     getGraphicObjectProperty(pobjUID, __GO_Y_AXIS_LOG_FLAG__, jni_bool, (void **)&piLogFlag);
+    if (piLogFlag == NULL)
+    {
+        Scierror(999, _("'%s' property does not exist for this handle.\n"), "log_flag");
+        return -1;
+    }
+
     logFlags[1] = iLogFlag;
 
     getGraphicObjectProperty(pobjUID, __GO_Z_AXIS_LOG_FLAG__, jni_bool, (void **)&piLogFlag);
+    if (piLogFlag == NULL)
+    {
+        Scierror(999, _("'%s' property does not exist for this handle.\n"), "log_flag");
+        return -1;
+    }
+
     logFlags[2] = iLogFlag;
 
     for (i = 0; i < 3; i++)
index 79d7513..ab0ec75 100644 (file)
@@ -39,6 +39,11 @@ int get_position_property(void* _pvCtx, char* pobjUID)
     double* position = NULL;
 
     getGraphicObjectProperty(pobjUID, __GO_TYPE__, jni_int, (void **) &piType);
+    if (piType == NULL)
+    {
+        Scierror(999, _("'%s' property does not exist for this handle.\n"), "type");
+        return -1;
+    }
 
     /* Special figure case */
     if (iType == __GO_FIGURE__)
index 180da94..733a1ad 100644 (file)
@@ -48,6 +48,12 @@ int get_segs_color_property(void* _pvCtx, char* pobjUID)
 
     /* convert from int array to double one. */
     getGraphicObjectProperty(pobjUID, __GO_NUMBER_ARROWS__, jni_int, (void**)&piNbSegs);
+    if (piNbSegs == NULL)
+    {
+        Scierror(999, _("'%s' property does not exist for this handle.\n"), "segs_color");
+        return -1;
+    }
+
     status = sciReturnRowIntVector(_pvCtx, segsColors, iNbSegs);
     return status;
 }
index 05c7ee0..87b8e94 100644 (file)
@@ -43,6 +43,11 @@ int get_sub_tics_property(void* _pvCtx, char* pobjUID)
     /* modified jb Silvy 01/2006 */
 
     getGraphicObjectProperty(pobjUID, __GO_TYPE__, jni_int, (void **)&piType);
+    if (piType == NULL)
+    {
+        Scierror(999, _("'%s' property does not exist for this handle.\n"), "type");
+        return -1;
+    }
 
     /*
      * Type test required as the Axis object stores subticks as a single int
@@ -67,7 +72,6 @@ int get_sub_tics_property(void* _pvCtx, char* pobjUID)
         int* piView = &iView;
 
         getGraphicObjectProperty(pobjUID, __GO_X_AXIS_SUBTICKS__, jni_int, (void**)&piSubTicks);
-
         if (piSubTicks == NULL)
         {
             Scierror(999, _("'%s' property does not exist for this handle.\n"), "sub_ticks");
@@ -77,12 +81,29 @@ int get_sub_tics_property(void* _pvCtx, char* pobjUID)
         sub_ticks[0] = iSubTicks;
 
         getGraphicObjectProperty(pobjUID, __GO_Y_AXIS_SUBTICKS__, jni_int, (void**)&piSubTicks);
+        if (piSubTicks == NULL)
+        {
+            Scierror(999, _("'%s' property does not exist for this handle.\n"), "sub_ticks");
+            return -1;
+        }
+
         sub_ticks[1] = iSubTicks;
 
         getGraphicObjectProperty(pobjUID, __GO_Z_AXIS_SUBTICKS__, jni_int, (void**)&piSubTicks);
+        if (piSubTicks == NULL)
+        {
+            Scierror(999, _("'%s' property does not exist for this handle.\n"), "sub_ticks");
+            return -1;
+        }
+
         sub_ticks[2] = iSubTicks;
 
         getGraphicObjectProperty(pobjUID, __GO_VIEW__, jni_int, (void**)&piView);
+        if (piView == NULL)
+        {
+            Scierror(999, _("'%s' property does not exist for this handle.\n"), "view");
+            return -1;
+        }
 
         if (iView == 1)
         {
index f2d1390..5a6ed55 100644 (file)
@@ -41,6 +41,11 @@ int get_title_property(void* _pvCtx, char* pobjUID)
     int *piType = &iType;
 
     getGraphicObjectProperty(pobjUID, __GO_TYPE__, jni_int, (void **)&piType);
+    if (piType == NULL)
+    {
+        Scierror(999, _("Wrong value for '%s' property.\n"), "type");
+        return -1;
+    }
 
     if (iType != __GO_AXES__)
     {
index 92c3e69..cf61141 100644 (file)
@@ -45,6 +45,11 @@ int get_triangles_property(void* _pvCtx, char* pobjUID)
     }
 
     getGraphicObjectProperty(pobjUID, __GO_DATA_MODEL_NUM_INDICES__, jni_int, (void**)&piNumTriangles);
+    if (piNumTriangles == NULL)
+    {
+        Scierror(999, _("Wrong value for '%s' property.\n"), "triangles");
+        return -1;
+    }
 
     return sciReturnMatrix(_pvCtx, triangles, numTriangles , 5);
 }
index fc7dd0c..25a9104 100644 (file)
@@ -92,6 +92,11 @@ int get_type_property(void* _pvCtx, char* pobjUID)
     int *piType = &iType;
 
     getGraphicObjectProperty(pobjUID, __GO_TYPE__, jni_int, (void **)&piType);
+    if (piType == NULL)
+    {
+        return sciReturnString(_pvCtx, getTypeNameFromInt(-1));
+    }
+
     return sciReturnString(_pvCtx, getTypeNameFromInt(iType));
     //return sciReturnString(sciGetCharEntityType(pobj));
 }
index 91c5796..2241c9f 100644 (file)
@@ -41,7 +41,7 @@ int get_user_data_property(void* _pvCtx, char* pobjUID)
 
     getGraphicObjectProperty(pobjUID, __GO_USER_DATA__, jni_int_vector, (void **)&piUserData);
 
-    if ((piUserData == NULL) || (piUserDataSize == 0))
+    if ((piUserData == NULL) || (piUserDataSize == NULL))
     {
         status = sciReturnEmptyMatrix(_pvCtx);
     }
index 791b116..0da576b 100644 (file)
@@ -44,6 +44,11 @@ int get_xtics_coord_property(void* _pvCtx, char* pobjUID)
     }
 
     getGraphicObjectProperty(pobjUID, __GO_X_NUMBER_TICKS__, jni_int, (void**)&xNumberTicks);
+    if (xNumberTicks == NULL)
+    {
+        Scierror(999, _("'%s' property does not exist for this handle.\n"), "xtics_coord");
+        return -1;
+    }
 
     return sciReturnRowVector(_pvCtx, xTicksCoords, *xNumberTicks);
 }
index 136f5d5..749cf91 100644 (file)
@@ -44,6 +44,11 @@ int get_ytics_coord_property(void* _pvCtx, char* pobjUID)
     }
 
     getGraphicObjectProperty(pobjUID, __GO_Y_NUMBER_TICKS__, jni_int, (void**)&piYNumberTicks);
+    if (piYNumberTicks == NULL)
+    {
+        Scierror(999, _("'%s' property does not exist for this handle.\n"), "ytics_coord");
+        return -1;
+    }
 
     return sciReturnRowVector(_pvCtx, yTicksCoords, iYNumberTicks);
 }
index b762146..8f5316d 100644 (file)
@@ -41,16 +41,20 @@ int get_z_ticks_property(void* _pvCtx, char* pobjUID)
 
     /* retrieve number of ticks */
     getGraphicObjectProperty(pobjUID, __GO_Z_AXIS_NUMBER_TICKS__, jni_int, (void**)&piNbTicks);
-    /* retrieve view: 0 -> 2d // 1 -> 3d */
-    getGraphicObjectProperty(pobjUID, __GO_VIEW__, jni_int, (void**)&piView);
-
-
     if (piNbTicks == NULL)
     {
         Scierror(999, _("'%s' property does not exist for this handle.\n"), "z_ticks");
         return -1;
     }
 
+    /* retrieve view: 0 -> 2d // 1 -> 3d */
+    getGraphicObjectProperty(pobjUID, __GO_VIEW__, jni_int, (void**)&piView);
+    if (piView == NULL)
+    {
+        Scierror(999, _("'%s' property does not exist for this handle.\n"), "view");
+        return -1;
+    }
+
     if (iNbTicks == 0 || iView == 0)
     {
         /* return empty matrices */