Changeset 290


Ignore:
Timestamp:
Jul 10, 2017, 9:52:46 AM (3 years ago)
Author:
Valery V. Sedletski
Message:
  • Fix a buffer overrun in FS_READ.
  • Fix seconds vs twosecs error in timestamps.
  • Fix erroneous counting of files in the directory on file delete in FS_RMDIR. Wrong nomber of files counted.
Location:
trunk/src
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/ifs/fat32a.c

    r289 r290  
    60336033         pNew1->u.File.ulLastModifiedTimestp.hour = pGI->hour;
    60346034         pNew1->u.File.ulLastModifiedTimestp.minutes = pGI->minutes;
    6035          pNew1->u.File.ulLastModifiedTimestp.seconds = pGI->seconds;
     6035         pNew1->u.File.ulLastModifiedTimestp.twosecs = pGI->seconds / 2;
    60366036
    60376037         pNew1->u.File.ulCreateTimestp = pNew1->u.File.ulLastModifiedTimestp;
  • trunk/src/ifs/ifsdir.c

    r284 r290  
    625625            PDIRENTRY1 pWork1 = (PDIRENTRY1)pDir;
    626626            PDIRENTRY1 pMax1 = (PDIRENTRY1)((PBYTE)pDir + pVolInfo->ulBlockSize);
    627             BYTE bSecondaryCount;
     627            BYTE bSecondaryCount = 0;
     628            BYTE bSecondaries = 0;
    628629            while (pWork1 < pMax1)
    629630               {
    630                BYTE bSecondaries = 0;
    631631               if (pWork1->bEntryType == ENTRY_TYPE_EOD)
    632632                  {
     
    648648                     }
    649649                  }
    650                if (bSecondaries == bSecondaryCount)
     650               if (bSecondaries && bSecondaryCount &&
     651                   bSecondaries == bSecondaryCount)
     652                  {
    651653                  usFileCount++;
     654                  bSecondaries = 0;
     655                  bSecondaryCount = 0;
     656                  }
    652657               pWork1++;
    653658               }
  • trunk/src/ifs/ifsfile.c

    r289 r290  
    16351635            USHORT  usAdjacentBlocks;
    16361636            USHORT  usBlocks;
     1637            ULONG   ulBytesRead2 = 0;
    16371638
    16381639#ifdef INCL_LONGLONG
     
    17251726
    17261727                           pBufPosition                += ulBytesPerBlock;
     1728                           ulBytesRead2                += ulBytesPerBlock;
    17271729                           ulClusterSector             += usSectorsPerBlock;
    17281730                           usAdjacentBlocks--;
     
    17311733
    17321734#ifdef INCL_LONGLONG
    1733                     pos                             += (USHORT)ulCurrBytesToRead;
    1734 #else
    1735                     pos                             =  iAddUS(pos, (USHORT)ulCurrBytesToRead);
    1736 #endif
    1737                     usBytesRead                     += (USHORT)ulCurrBytesToRead;
    1738                     usBytesToRead                   -= (USHORT)ulCurrBytesToRead;
     1735                    pos                             += (USHORT)ulBytesRead2; //ulCurrBytesToRead;
     1736#else
     1737                    pos                             =  iAddUS(pos, (USHORT)ulBytesRead2); //ulCurrBytesToRead);
     1738#endif
     1739                    usBytesRead                     += (USHORT)ulBytesRead2; //ulCurrBytesToRead;
     1740                    usBytesToRead                   -= (USHORT)ulBytesRead2; //ulCurrBytesToRead;
    17391741                    usAdjacentBlocks                =  (USHORT)(pVolInfo->ulClusterSize / pVolInfo->ulBlockSize);
    17401742                    usAdjacentClusters              =  1;
     
    17911793                    goto FS_READEXIT;
    17921794                }
    1793                 memcpy(pBufPosition,pbCluster, (USHORT)ulCurrBytesToRead);
     1795                memcpy(pBufPosition, pbCluster, (USHORT)ulCurrBytesToRead);
    17941796
    17951797#ifdef INCL_LONGLONG
     
    24212423            USHORT  usAdjacentBlocks;
    24222424            USHORT  usBlocks;
     2425            ULONG   ulBytesWritten2 = 0;
    24232426
    24242427#ifdef INCL_LONGLONG
     
    25092512
    25102513                           pBufPosition                += ulBytesPerBlock;
     2514                           ulBytesWritten2             += ulBytesPerBlock;
    25112515                           ulClusterSector             += usSectorsPerBlock;
    25122516                           usAdjacentBlocks--;
     
    25152519
    25162520#ifdef INCL_LONGLONG
    2517                     pos                             += (USHORT)ulCurrBytesToWrite;
    2518 #else
    2519                     pos                             =  iAddUS(pos, (USHORT)ulCurrBytesToWrite);
    2520 #endif
    2521                     usBytesWritten                  += (USHORT)ulCurrBytesToWrite;
    2522                     usBytesToWrite                  -= (USHORT)ulCurrBytesToWrite;
     2521                    pos                             += (USHORT)ulBytesWritten2; //ulCurrBytesToWrite;
     2522#else
     2523                    pos                             =  iAddUS(pos, (USHORT)ulBytesWritten2); //ulCurrBytesToWrite);
     2524#endif
     2525                    usBytesWritten                  += (USHORT)ulBytesWritten2; //ulCurrBytesToWrite;
     2526                    usBytesToWrite                  -= (USHORT)ulBytesWritten2; //ulCurrBytesToWrite;
    25232527                    usAdjacentBlocks                =  (USHORT)(pVolInfo->ulClusterSize / pVolInfo->ulBlockSize);
    25242528                    usAdjacentClusters              = 1;
  • trunk/src/ifs/ifsfind.c

    r284 r290  
    18121812   FTIME time = {0};
    18131813
    1814    time.twosecs = (USHORT)ts.seconds / 2;
     1814   time.twosecs = (USHORT)ts.twosecs;
    18151815   time.minutes = (USHORT)ts.minutes;
    18161816   time.hours = (USHORT)ts.hour;
     
    18231823   TIMESTAMP ts;
    18241824
    1825    ts.seconds = time.twosecs * 2;
     1825   ts.twosecs = time.twosecs;
    18261826   ts.minutes = time.minutes;
    18271827   ts.hour = time.hours;
  • trunk/src/include/exfatdef.h

    r248 r290  
    5555typedef struct _TimeStamp
    5656{
    57    ULONG seconds:5;
     57   ULONG twosecs:5;
    5858   ULONG minutes:6;
    5959   ULONG hour:5;
  • trunk/src/include/fat32def.h

    r283 r290  
    148148#define EXFAT_EOF2       0xFFFFFFF8
    149149#define EXFAT_BAD_CLUSTER 0xFFFFFFF7
    150 #define FAT_ASSIGN_NEW 0xFFFFFFFF
     150//#define FAT_ASSIGN_NEW 0xFFFFFFFF
     151#define FAT_ASSIGN_NEW 0x1
    151152#define FAT_NOTUSED    0x00000000
    152153#define SECTOR_SIZE    512
  • trunk/src/ufat32/chkdsk.c

    r286 r290  
    18471847USHORT usNumSecondary;
    18481848USHORT usNameLen, usNameHash, usFileAttr;
    1849 ULONGLONG ullSize;
     1849ULONGLONG ullSize = 0;
    18501850ULONG ulFirstClus;
    18511851BOOL fEAS;
     
    21092109                     }
    21102110                  //else if (!DirEntry.ulFileSize)
    2111                   else if (!ullSize)
     2111                  else if (!DirStream.u.Stream.ullValidDataLen)
    21122112                     {
    21132113                     show_message("%s is marked having EAs, but the EA file (%s) is empty\n", 0, 0, 2, pbPath, Mark.szFileName);
  • trunk/src/ufat32/os2.c

    r289 r290  
    707707   pDir->u.File.ulLastModifiedTimestp.hour = datetime.hours;
    708708   pDir->u.File.ulLastModifiedTimestp.minutes = datetime.minutes;
    709    pDir->u.File.ulLastModifiedTimestp.seconds = datetime.seconds;
     709   pDir->u.File.ulLastModifiedTimestp.twosecs = datetime.seconds / 2;
    710710
    711711   pDir->u.File.ulCreateTimestp = pDir->u.File.ulLastModifiedTimestp;
  • trunk/src/ufat32/win32.c

    r289 r290  
    408408   pDir->u.File.ulLastModifiedTimestp.hour = datetime.wHour;
    409409   pDir->u.File.ulLastModifiedTimestp.minutes = datetime.wMinute;
    410    pDir->u.File.ulLastModifiedTimestp.seconds = datetime.wSecond / 2;
     410   pDir->u.File.ulLastModifiedTimestp.twosecs = datetime.wSecond / 2;
    411411
    412412   pDir->u.File.ulCreateTimestp = pDir->u.File.ulLastModifiedTimestp;
Note: See TracChangeset for help on using the changeset viewer.