Opened 18 years ago

Closed 18 years ago

#31 closed defect (fixed)

qfile_pm.cpp: isValidFile() doesn't work correctly for filenames with national characters

Reported by: froloff Owned by: dmik
Priority: normal Milestone: qt-os2-3.3.1-rc07
Component: tools Version: 3.3.1-rc06
Severity: minor Keywords: QFile national characters
Cc:

Description (last modified by dmik)

Мелочь, поэтому напишу по русски :) . bool isValidFile( const QString& fileName ) использует strchr() для проверки символа в имени файла на if ( strchr( badChars, fileName[i] ) ) Перед этим для приведения fileName[i] к char неявно вызывается метод latin1(), который для символов в уникоде (>0xFF) возвращает 0. Но согласно спецификации strchr() 0 это допустимы символ для поиска и более того конец строки '\0' также включается в поиск. В результате имеем FALSE для всех имён с национальными символами. Вот исправление:

    for ( int i = 0; i < (int) fileName.length(); i++) {
        if ( fileName[i] < QChar( 32 ) )
            return FALSE;
        '''if( (char)fileName[i] == 0 ) continue;'''

        if ( strchr( badChars, fileName[i] ) )
            return FALSE;
    }

Или можно заменить strchr() strnchr()

Change History (3)

comment:1 Changed 18 years ago by dmik

Description: modified (diff)
Keywords: QFile national characters added
Milestone: qt-os2-3.3.1-rc07
Status: newassigned
Summary: qfile_pm.cpp minor changeQFile::isValidFile() doesn't work correctly for filenames with national characters
Version: 3.3.1-rc06

comment:2 Changed 18 years ago by dmik

Summary: QFile::isValidFile() doesn't work correctly for filenames with national charactersqfile_pm.cpp: isValidFile() doesn't work correctly for filenames with national characters

comment:3 Changed 18 years ago by dmik

Component: kerneltools
Resolution: fixed
Status: assignedclosed

Fixed by r127. Thanks for reporting.

Note: See TracTickets for help on using tickets.