Add some tests for off-by-one errors.
authorMatthias Clasen <mclasen@redhat.com>
Thu, 22 Apr 2004 20:51:07 +0000 (20:51 +0000)
committerMatthias Clasen <matthiasc@src.gnome.org>
Thu, 22 Apr 2004 20:51:07 +0000 (20:51 +0000)
2004-04-22  Matthias Clasen  <mclasen@redhat.com>

* tests/queue-test.c (main): Add some tests for off-by-one errors.

* glib/gqueue.c (g_queue_pop_nth_link): Fix an off-by-one
error.  (#139703, Philippe Blain)

ChangeLog
ChangeLog.pre-2-10
ChangeLog.pre-2-12
ChangeLog.pre-2-4
ChangeLog.pre-2-6
ChangeLog.pre-2-8
glib/gqueue.c
tests/queue-test.c

index fe7d160..54b41fc 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
 2004-04-22  Matthias Clasen  <mclasen@redhat.com>
 
+       * tests/queue-test.c (main): Add some tests for off-by-one errors.
+
+       * glib/gqueue.c (g_queue_pop_nth_link): Fix an off-by-one 
+       error.  (#139703, Philippe Blain)
+
        * tests/testglib.c (main): Add testcases for g_message() involving
        non-printable and unsafe characters.
 
index fe7d160..54b41fc 100644 (file)
@@ -1,5 +1,10 @@
 2004-04-22  Matthias Clasen  <mclasen@redhat.com>
 
+       * tests/queue-test.c (main): Add some tests for off-by-one errors.
+
+       * glib/gqueue.c (g_queue_pop_nth_link): Fix an off-by-one 
+       error.  (#139703, Philippe Blain)
+
        * tests/testglib.c (main): Add testcases for g_message() involving
        non-printable and unsafe characters.
 
index fe7d160..54b41fc 100644 (file)
@@ -1,5 +1,10 @@
 2004-04-22  Matthias Clasen  <mclasen@redhat.com>
 
+       * tests/queue-test.c (main): Add some tests for off-by-one errors.
+
+       * glib/gqueue.c (g_queue_pop_nth_link): Fix an off-by-one 
+       error.  (#139703, Philippe Blain)
+
        * tests/testglib.c (main): Add testcases for g_message() involving
        non-printable and unsafe characters.
 
index fe7d160..54b41fc 100644 (file)
@@ -1,5 +1,10 @@
 2004-04-22  Matthias Clasen  <mclasen@redhat.com>
 
+       * tests/queue-test.c (main): Add some tests for off-by-one errors.
+
+       * glib/gqueue.c (g_queue_pop_nth_link): Fix an off-by-one 
+       error.  (#139703, Philippe Blain)
+
        * tests/testglib.c (main): Add testcases for g_message() involving
        non-printable and unsafe characters.
 
index fe7d160..54b41fc 100644 (file)
@@ -1,5 +1,10 @@
 2004-04-22  Matthias Clasen  <mclasen@redhat.com>
 
+       * tests/queue-test.c (main): Add some tests for off-by-one errors.
+
+       * glib/gqueue.c (g_queue_pop_nth_link): Fix an off-by-one 
+       error.  (#139703, Philippe Blain)
+
        * tests/testglib.c (main): Add testcases for g_message() involving
        non-printable and unsafe characters.
 
index fe7d160..54b41fc 100644 (file)
@@ -1,5 +1,10 @@
 2004-04-22  Matthias Clasen  <mclasen@redhat.com>
 
+       * tests/queue-test.c (main): Add some tests for off-by-one errors.
+
+       * glib/gqueue.c (g_queue_pop_nth_link): Fix an off-by-one 
+       error.  (#139703, Philippe Blain)
+
        * tests/testglib.c (main): Add testcases for g_message() involving
        non-printable and unsafe characters.
 
index 5d5ef09..b811670 100644 (file)
@@ -662,7 +662,7 @@ g_queue_pop_nth_link (GQueue *queue,
   
   g_return_val_if_fail (queue != NULL, NULL);
 
-  if (n > queue->length)
+  if (n >= queue->length)
     return NULL;
   
   link = g_queue_peek_nth_link (queue, n);
index 688b56e..aeb1df3 100644 (file)
@@ -927,14 +927,28 @@ int main(int argc, gchar *args[])
   g_queue_foreach (q2, remove_item, q2);
   check_integrity (q2);
   check_integrity (q);
+
+  /* some checks for off by one errors */  
+  g_queue_push_tail (q, GINT_TO_POINTER (1234));
+  check_integrity (q);
+  node = g_queue_peek_tail_link (q);
+  g_assert (node != NULL && node->data == GINT_TO_POINTER (1234));
+  node = g_queue_peek_nth_link (q, g_queue_get_length (q));
+  g_assert (node == NULL);
+  node = g_queue_peek_nth_link (q, g_queue_get_length (q) - 1);
+  g_assert (node->data == GINT_TO_POINTER (1234));
+  node = g_queue_pop_nth_link (q, g_queue_get_length (q));
+  g_assert (node == NULL);
+  node = g_queue_pop_nth_link (q, g_queue_get_length (q) - 1);
+  g_assert (node != NULL && node->data == GINT_TO_POINTER (1234));
   
   g_queue_free (q);
 
   if (argc > 1)
     random_test (strtol (args[1], NULL, 0));
   else
-    random_test (time (0));
-  
+    random_test (time (0));  
+
   return 0;
 }