GNU bug report logs - #15591
gpt mishandles non ascii partition names

Previous Next

Package: parted;

Reported by: Phillip Susi <psusi <at> ubuntu.com>

Date: Fri, 11 Oct 2013 19:00:02 UTC

Severity: normal

Merged with 15597

Done: Jim Meyering <jim <at> meyering.net>

Bug is archived. No further changes may be made.

Full log


Message #40 received at 15591 <at> debbugs.gnu.org (full text, mbox):

From: Jim Meyering <jim <at> meyering.net>
To: Phillip Susi <psusi <at> ubuntu.com>
Cc: 15591 <at> debbugs.gnu.org
Subject: Re: [PATCH] libparted: handle i18n gpt partition names correctly
Date: Sat, 21 Dec 2013 10:31:22 -0800
On Fri, Dec 20, 2013 at 6:25 PM, Phillip Susi <psusi <at> ubuntu.com> wrote:
> gpt.c was simply truncating the UTF-16 characters stored
> in the partition name field to 8 bits.  This corrupted non
> ascii characters which later resulted in parted crashing in
> strlist.c trying to convert the now invalid multi byte
> characters to wchar.
>
> gpt.c will now properly convert the UTF-16 to the current
> locale encoding.

Thanks for adding the test.
Please add something like this to NEWS, too:

  parted no longer crashes when processing non-ASCII partition names

Please make the new t*.sh script executable.

>  libparted/labels/gpt.c     | 60 ++++++++++++++++++++++++++++++++++++++++------
>  tests/Makefile.am          |  1 +
>  tests/t0251-gpt-unicode.sh | 40 +++++++++++++++++++++++++++++++

> diff --git a/tests/t0251-gpt-unicode.sh b/tests/t0251-gpt-unicode.sh
> new file mode 100644
...
> +dev=loop-file
> +
> +# create zeroed device
> +truncate -s 10m $dev || fail=1
> +
> +# create gpt label with named partition
> +parted -s $dev mklabel gpt mkpart primary ext2 1MiB 2MiB name 1 fooᴤ > empty 2>&1 || fail=1

Please keep the contents of this test source file ASCII, e.g.,

  part_name=$(printf 'foo\341\264\244')
  parted -s $dev mklabel gpt mkpart primary ext2 1MiB 2MiB name 1 fooᴤ
> empty 2>&1 || fail=1

> +# ensure there was no output
> +compare /dev/null empty || fail=1
> +
> +# check for expected output
> +dd if=$dev bs=1 skip=$((512+$sector_size_+58)) count=10 2>/dev/null | hd
> +  > out || fail=1

We have never used "hd" so far in these tests.
Let's use "od" instead, e.g.,

  $ printf 'foo\341\264\244\n'|od -An -tx1
   66 6f 6f e1 b4 a4 0a

> +cat <<EOF >> exp
> +00000000  66 00 6f 00 6f 00 24 1d  00 00                    |f.o.o.$...|
> +0000000a
> +EOF

Then the above four lines can become one line:

  echo '...' > exp || framework_failure_

> +compare exp out || fail=1




This bug report was last modified 11 years and 154 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.