Ver código fonte

Check regions in backprojection for valid input

Tomas Farago 9 anos atrás
pai
commit
1a29b0ec91
1 arquivos alterados com 19 adições e 6 exclusões
  1. 19 6
      src/ufo-anka-backproject-task.c

+ 19 - 6
src/ufo-anka-backproject-task.c

@@ -98,6 +98,22 @@ create_transformation_matrix (UfoAnkaBackprojectTaskPrivate *priv, float tomo_an
     priv->tmatrix[7] = EXTRACT_FLOAT (priv->center, 1) - EXTRACT_INT (priv->projection_offset, 1);
 }
 
+static void
+set_region (GValueArray *src, GValueArray **dst)
+{
+    if (EXTRACT_INT (src, 0) > EXTRACT_INT (src, 1)) {
+        g_log ("Ufo", G_LOG_LEVEL_CRITICAL,
+               "Error <%s:%i>: Invalid region [\"from\", \"to\", \"step\"]: [%d, %d, %d], "\
+               "\"from\" has to be less than or equal to \"to\"",
+               __FILE__, __LINE__,
+               EXTRACT_INT (src, 0), EXTRACT_INT (src, 1), EXTRACT_INT (src, 2));
+    }
+    else {
+        g_value_array_free (*dst);
+        *dst = g_value_array_copy (src);
+    }
+}
+
 UfoNode *
 ufo_anka_backproject_task_new (void)
 {
@@ -295,18 +311,15 @@ ufo_anka_backproject_task_set_property (GObject *object,
     switch (property_id) {
         case PROP_X_REGION:
             array = (GValueArray *) g_value_get_boxed (value);
-            g_value_array_free (priv->x_region);
-            priv->x_region = g_value_array_copy (array);
+            set_region (array, &priv->x_region);
             break;
         case PROP_Y_REGION:
             array = (GValueArray *) g_value_get_boxed (value);
-            g_value_array_free (priv->y_region);
-            priv->y_region = g_value_array_copy (array);
+            set_region (array, &priv->y_region);
             break;
         case PROP_Z_REGION:
             array = (GValueArray *) g_value_get_boxed (value);
-            g_value_array_free (priv->z_region);
-            priv->z_region = g_value_array_copy (array);
+            set_region (array, &priv->z_region);
             break;
         case PROP_PROJECTION_OFFSET:
             array = (GValueArray *) g_value_get_boxed (value);