I think this error is located in the cygwin/ntea.cc read_ea function. NtQueryEaFile fails due to unsupported extended attributes on fat32 and iso9660 and ret is set to -1. After setting ret to -1 the function checks fea->EaValueLength which is in my case 8313 (see log) due to an uninitialized stack and read_ea return 8313. Now the calling function (fhandler_base::fstat_helper) is using the uninitialized data for the timestamp and file size and returns incorrect values. This error doesn't happen on the new 1.7 release, but I need a solution for the stable version.

if (!NT_SUCCESS (status))
    {
      ret = -1;
      debug_printf ("%x = NtQueryEaFile (%s, %s), Win32 error %d",
status, file, attrname, RtlNtStatusToDosError (status));
    }
  if (!fea->EaValueLength)
    ret = 0;
  else
    {
      memcpy (attrbuf, fea->EaName + fea->EaNameLength + 1,
              fea->EaValueLength);
      ret = fea->EaValueLength;
    }



David Engraf schrieb:
Hi,

I have encountered a problem while listening the content of a CD. When I call "ls -l /cygdrive/d" the file size and creation/modification time is corrupted. This also happens on usb sticks formatted with fat32. Only ntfs formatted filesystems have the correct listening. Attached is a strace log calling the function fstat on a file located on the specified filesystem.

//ISO9660
get_file_attribute: file: d:\README.txt
read_ea: 1. chance, C0000010 = NtQueryEaFile (d:\README.txt, .UNIXATTR), Win32 error 1
read_ea: C0000010 = NtQueryEaFile (d:\README.txt, .UNIXATTR), Win32 error 1
read_ea: 8313 = read_ea (0, d:\README.txt, .UNIXATTR, 22A9F0, 4)
fhandler_base::fstat_helper: 0 = fstat (, 0x22A9E0) st_atime=6B126FF st_size=-40681930227712, st_mode=0x22A9F061, st_ino=-4583408731929810241, sizeof=96
fstat64: 0 = fstat (3, 0x22A9E0)


//FAT32
get_file_attribute: file: e:\README.txt
read_ea: 1. chance, C000004F = NtQueryEaFile (e:\README.txt, .UNIXATTR), Win32 error 282 read_ea: C000004F = NtQueryEaFile (e:\README.txt, .UNIXATTR), Win32 error 282
read_ea: 8313 = read_ea (0, e:\README.txt, .UNIXATTR, 22A9F0, 4)
fhandler_base::fstat_helper: 0 = fstat (, 0x22A9E0) st_atime=6D7072 st_size=3328772759537140781, st_mode=0x22A9F061, st_ino=-3532118121688219773, sizeof=96
fstat64: 0 = fstat (3, 0x22A9E0)


//NTFS
get_file_attribute: file: c:\README.txt
read_ea: 0 = read_ea (6BC, c:\README.txt, .UNIXATTR, 22A410, 4)
fhandler_base::fstat_helper: 0 = fstat (, 0x22A400) st_atime=4A1A7CA3 st_size=3088, st_mode=0x8124, st_ino=3096224743855743, sizeof=96
fstat64: 0 = fstat (6, 0x22A400)


Thank you


--
David Engraf
Product Engineer

SYSGO AG
Office Mainz
Am Pfaffenstein 14 / D-55270 Klein-Winternheim / Germany

Handelsregister: HRB Mainz 90 HRB 8066
Vorstand: Michael Tiedemann
Aufsichtsratsvorsitzender: Knut Degen
USt(VAT)-Id-Nr.: DE 149062328

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/

Reply via email to