[Parted-maintainers] Bug#386973: parted: header of 'print' output
is corrupted
Colin Watson
cjwatson at ubuntu.com
Mon Sep 11 11:57:03 UTC 2006
Package: parted
Version: 1.7.1-2.1
Severity: normal
Tags: patch
The header produced by the 'print' command is corrupted, as follows
(note the first two characters of what should be "Number"):
Disk /dev/hda: 60.0GB
Sector size (logical/physical): 512B/512B
Partition Table: mac
▒▒mber Start End Size File system Name Flags
This is due to the kfreebsd-gnu patch, which incorrectly assumes that it
can copy a pointer, realloc it, and then memcpy from the original
pointer. Since realloc is not guaranteed to move the pointer, or even
(as far as I can tell) not to overlap the new memory area with the
original, you need to duplicate the original string first and memcpy
from that. The attached patch does this.
Changelog entry:
* kfreebsd-gnu.dpatch: Fix memory corruption in table_render_row.
Thanks,
--
Colin Watson [cjwatson at ubuntu.com]
-------------- next part --------------
diff -u parted-1.7.1/debian/patches/kfreebsd-gnu.dpatch parted-1.7.1/debian/patches/kfreebsd-gnu.dpatch
--- parted-1.7.1/debian/patches/kfreebsd-gnu.dpatch
+++ parted-1.7.1/debian/patches/kfreebsd-gnu.dpatch
@@ -1431,15 +1431,32 @@
diff -urNad parted-1.7.0~/parted/table.c parted-1.7.0/parted/table.c
--- parted-1.7.0~/parted/table.c 2006-05-19 03:54:01.000000000 -0300
+++ parted-1.7.0/parted/table.c 2006-05-19 03:54:36.000000000 -0300
-@@ -25,6 +25,7 @@
+@@ -23,22 +23,22 @@
+
+
++#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
+#include <string.h>
#include <assert.h>
-@@ -48,8 +49,24 @@
+ #include <config.h>
+
+ #ifdef ENABLE_NLS
+-# define _GNU_SOURCE
+ # include <wchar.h>
+ int wcswidth (const wchar_t *s, size_t n);
+ #else
+ # ifdef wchar_t
+ # undef wchar_t
+ # endif
+-# define _GNU_SOURCE
+ # include <string.h>
+ # define wchar_t char
+ # define wcslen strlen
+@@ -48,8 +48,24 @@
size_t strnlen (const char *, size_t);
#endif
@@ -1465,25 +1482,26 @@
static const unsigned int MAX_WIDTH = 512;
#ifdef ENABLE_NLS
-@@ -186,7 +203,8 @@
+@@ -186,7 +202,8 @@
{
wchar_t** row = t->rows[rownum];
int len = 1, i;
- size_t newsize;
+ size_t newsize, oldsize;
-+ wchar_t *temps;
++ wchar_t *temps;
assert(t);
assert(s != NULL);
-@@ -197,7 +215,11 @@
+@@ -197,7 +214,12 @@
len += wcslen(COLSUFFIX);
newsize = (wcslen(*s) + len + 1) * sizeof(wchar_t);
-+ oldsize = (wcslen(*s) + 1) * sizeof(wchar_t);
++ oldsize = (wcslen(*s) + 1) * sizeof(wchar_t);
+
-+ temps = *s;
++ temps = wcsdup(*s);
*s = realloc (*s, newsize);
-+ memcpy(*s, temps, oldsize);
++ memcpy(*s, temps, oldsize);
++ free(temps);
for (i = 0; i < ncols; ++i)
{
More information about the Parted-maintainers
mailing list