git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH] pack-bitmap: do not core dump

From
Kyle J. McKay <mackyle@gmail.com>
Date
Apr 22, 2014, 22:53 UTC
Message-ID
<781073ea08e86301f62e708bc0b80fd@74d39fa044aa309eaea14b9f57fe79c>
So I was trying to use pack.writebitmaps=true and all I got was core dumps.

The fix with a real subject line ;) is below. I think perhaps this should be picked up for the 2.0.0 release. (Patch is against master.)

--Kyle
---- >8 ----
Subject: [PATCH] ewah_bitmap.c: do not assume size_t and eword_t are the same size

When buffer_grow changes the size of the buffer using realloc, it first computes and saves the rlw pointer's offset into the buffer using (uint8_t *) math before the realloc but then restores it using (eword_t *) math.

In order to do this it's necessary to convert the (uint8_t *) offset into an (eword_t *) offset. It was doing this by dividing by the sizeof(size_t). Unfortunately sizeof(size_t) is not same as sizeof(eword_t) on all platforms.

This causes illegal memory accesses and other bad things to happen when attempting to use bitmaps on those platforms.

Fix this by dividing by the sizeof(eword_t) instead which will always be correct for all platforms.

Signed-off-by: Kyle J. McKay <mackyle@gmail.com>
---
 ewah/ewah_bitmap.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/ewah/ewah_bitmap.c b/ewah/ewah_bitmap.c
index 9ced2dad..fccb42b5 100644
--- a/ewah/ewah_bitmap.c
+++ b/ewah/ewah_bitmap.c
@@ -41,7 +41,7 @@ static inline void buffer_grow(struct ewah_bitmap *self, size_t new_size)
 	self->alloc_size = new_size;
 	self->buffer = ewah_realloc(self->buffer,
 		self->alloc_size * sizeof(eword_t));
-	self->rlw = self->buffer + (rlw_offset / sizeof(size_t));
+	self->rlw = self->buffer + (rlw_offset / sizeof(eword_t));
 }
 
 static inline void buffer_push(struct ewah_bitmap *self, eword_t value)
-- 
1.8.5
Next: Junio C Hamano
Message 1 of 4 in “pack-bitmap: do not core dump”
  1. pack-bitmap: do not core dumpKyle J. McKay, Apr 22, 2014
  2. Junio C HamanoApr 22, 2014
  3. Jeff KingApr 22, 2014
  4. Kyle J. McKayApr 23, 2014

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.