Browse Source

Merge remote-tracking branch 'origin/maint-0.2.3' into maint-0.2.4

Nick Mathewson 11 years ago
parent
commit
bae5dd6c8d
3 changed files with 20 additions and 1 deletions
  1. 6 0
      changes/bug8844
  2. 2 1
      src/or/buffers.c
  3. 12 0
      src/test/test.c

+ 6 - 0
changes/bug8844

@@ -0,0 +1,6 @@
+  o Major bugfixes:
+    - Prevent the get_freelists() function from running off the end of
+      the list of freelists if it somehow gets an unrecognized
+      allocation. Fixes bug 8844; bugfix on 0.2.0.16-alpha. Reported by
+      eugenis.
+

+ 2 - 1
src/or/buffers.c

@@ -148,7 +148,8 @@ static INLINE chunk_freelist_t *
 get_freelist(size_t alloc)
 {
   int i;
-  for (i=0; freelists[i].alloc_size <= alloc; ++i) {
+  for (i=0; (freelists[i].alloc_size <= alloc &&
+             freelists[i].alloc_size); ++i ) {
     if (freelists[i].alloc_size == alloc) {
       return &freelists[i];
     }

+ 12 - 0
src/test/test.c

@@ -813,6 +813,18 @@ test_buffers(void)
   buf_free(buf);
   buf = NULL;
 
+  /* Try adding a string too long for any freelist. */
+  {
+    char *cp = tor_malloc_zero(65536);
+    buf = buf_new();
+    write_to_buf(cp, 65536, buf);
+    tor_free(cp);
+
+    tt_int_op(buf_datalen(buf), ==, 65536);
+    buf_free(buf);
+    buf = NULL;
+  }
+
  done:
   if (buf)
     buf_free(buf);