Fixes for getSelectedRows and getSelectedColumns (bug #319088).
authorbillh <billh@e2bd861d-eb25-0410-b326-f6ed22b6b98c>
Mon, 20 Mar 2006 16:57:46 +0000 (16:57 +0000)
committerbillh <billh@e2bd861d-eb25-0410-b326-f6ed22b6b98c>
Mon, 20 Mar 2006 16:57:46 +0000 (16:57 +0000)
Thanks to Peter Parente for finding the problems.

git-svn-id: http://svn.gnome.org/svn/at-spi/trunk@800 e2bd861d-eb25-0410-b326-f6ed22b6b98c

ChangeLog
libspi/table.c

index 57ab09c..d07b0b6 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2006-03-20  Bill Haneman <bill.haneman@sun.com>
+
+       * libspi/table.c:
+       (impl_get_selected_rows): Don't free the selection if it's
+       empty or has not been assigned; init it to NULL so you can tell.
+       Also, allow for zero selected rows.
+       (impl_getSelectedColumns): Ditto.  Bug #319088.
+
 2006-03-11  Vincent Untz  <vuntz@gnome.org>
 
        Leak fix for bug #334217.
index 82c5732..faac228 100644 (file)
@@ -274,7 +274,7 @@ static Accessibility_LongSeq *
 impl_getSelectedRows (PortableServer_Servant servant,
                      CORBA_Environment     *ev)
 {
-  gint *selectedRows;
+  gint *selectedRows = NULL;
   gint length;
   Accessibility_LongSeq *retval;
   AtkTable *table = get_table_from_servant (servant);
@@ -283,7 +283,7 @@ impl_getSelectedRows (PortableServer_Servant servant,
 
   length = atk_table_get_selected_rows (table, &selectedRows);
 
-  bonobo_return_val_if_fail (length > 0, NULL, ev);
+  bonobo_return_val_if_fail (length >= 0, NULL, ev);
 
   retval = Accessibility_LongSeq__alloc ();
   retval->_maximum = retval->_length = length;
@@ -294,7 +294,7 @@ impl_getSelectedRows (PortableServer_Servant servant,
       retval->_buffer[length] = selectedRows[length];
     }
 
-  g_free (selectedRows);
+  if (selectedRows) g_free (selectedRows);
 
   return retval;
 }
@@ -304,7 +304,7 @@ static Accessibility_LongSeq *
 impl_getSelectedColumns (PortableServer_Servant servant,
                         CORBA_Environment     *ev)
 {
-  gint *selectedColumns;
+  gint *selectedColumns = NULL;
   gint length;
   Accessibility_LongSeq *retval;
   AtkTable *table = get_table_from_servant (servant);
@@ -324,7 +324,7 @@ impl_getSelectedColumns (PortableServer_Servant servant,
       retval->_buffer[length] = (CORBA_long) selectedColumns[length];
     }
 
-  g_free (selectedColumns);
+  if (selectedColumns) g_free (selectedColumns);
 
   return retval;
 }