Package: dosfstools
Version: 3.0.4-1
Severity: critical
Tags: patch
Justification: causes serious data loss

With the change from 3.0.3 to 3.0.4 a singed/unsigned char mismatch was
introduced in check.c, which causes false positives in bad_name().

The problematic line is 257:
    char *name = file->dir_ent.name;

Dir_ent.name is of type __u8, which is the same as unsigned char. Thus
name must also be an unsigned char.

If it's not, bad_name() reports a false positive for characters > 0x7f
in line 269:
    if (name[i] < ' ' || name[i] == 0x7f) return 1;

A signed char > 0x7f is negative and so always less than the code for a
space.

I've marked this report as critical because with dosfsck -a and
(short) directory names containing such characters they will first
be renamed and then deleted and all it's files end up in unused chains.
Even when you use the -f option, you don't get the exact same files back
because they are padded with zeroes for the size to be a multiple of the
sector length. Besides, the directory structure and original filenames are
lost, too.

I'm attaching a patch with the fix.



-- System Information:
Debian Release: squeeze/sid
  APT prefers unstable
  APT policy: (500, 'unstable')
Architecture: i386 (x86_64)

Kernel: Linux 2.6.30.2-orbiter.x86-64.1 (PREEMPT)
Locale: LANG=pl_PL.UTF-8, LC_CTYPE=pl_PL.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/bash

Versions of packages dosfstools depends on:
ii  libc6                         2.9-21     GNU C Library: Shared libraries

dosfstools recommends no packages.

dosfstools suggests no packages.

-- no debconf information
diff -ru dosfstools-3.0.4/src/check.c dosfstools-3.0.4.new/src/check.c
--- dosfstools-3.0.4/src/check.c	2009-07-21 07:58:00.000000000 +0200
+++ dosfstools-3.0.4.new/src/check.c	2009-07-26 21:19:08.459704042 +0200
@@ -254,7 +254,7 @@
 {
     int i, spc, suspicious = 0;
     char *bad_chars = atari_format ? "*?\\/:" : "*?<>|\"\\/:";
-    char *name = file->dir_ent.name;
+    unsigned char *name = file->dir_ent.name;
 
     /* Do not complain about (and auto-correct) the extended attribute files
      * of OS/2. */

Reply via email to