You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Приветствую.
Обнаружил ошибку в классе PBFileChooser. В приложении PBXMMS2client, запущенном в эмуляторе, при открытии файлового диалога не отображаются никакие файлы, вне зависимости от выбранного фильтра.
PBFileChooser вызывается так: OpenFileChooser("Add 1 file", clsc->last_dir.data(), "*.mp3\n*.flac\n*.ogg\n*.wav\n*", PBFileChooser::PBFC_OPEN, (pb_dialoghandler) track_add_handler);
Для сборки для работы в эмуляторе использовался комилятор g++-14-i686-linux-gnu версия 14.2.0-6cross1 из дистрибутива Debian.
При этом, что странно, на PocketBook'е работает без ошибки. И в эмуляторе относительно недавно тоже этого не было.
При внимательном изучении и отладке нашел ошибку: В файле pbfilechooser.cxx строка 57, указателю присваивается адрес строки, возвращаемый функцией fc->getPattern(). В свою очередь, в файле pbfilechooser.h строка 100, берется указатель от временного объекта, который уничтожается при выходе из getPattern(). В отладчике видно, что при после выполнения строки 61 (ep = iv_readdir(dir)) по адресу указателя pattern появляется другое содержимое, и дальнейшее по коду сравнение строк работает неправильно.
Видимо какие-то изменения в последних обновлениях компилятора привели к тому, что эта ошибка стала проявляться.
Я сделал такое исправление в файле pbfilechooser.cxx: //const char* pattern = fc->getPattern(); char pattern[128]; strncpy(pattern, fc->getPattern(), 128);
и ошибка исчезла. Исправление не очень, т.к. вообще надо в pbfilechooser.h устранять возвращение указателя на временный объект.
The text was updated successfully, but these errors were encountered:
Приветствую.
Обнаружил ошибку в классе PBFileChooser. В приложении PBXMMS2client, запущенном в эмуляторе, при открытии файлового диалога не отображаются никакие файлы, вне зависимости от выбранного фильтра.
PBFileChooser вызывается так:
OpenFileChooser("Add 1 file", clsc->last_dir.data(), "*.mp3\n*.flac\n*.ogg\n*.wav\n*", PBFileChooser::PBFC_OPEN, (pb_dialoghandler) track_add_handler);
Для сборки для работы в эмуляторе использовался комилятор g++-14-i686-linux-gnu версия 14.2.0-6cross1 из дистрибутива Debian.
При этом, что странно, на PocketBook'е работает без ошибки. И в эмуляторе относительно недавно тоже этого не было.
При внимательном изучении и отладке нашел ошибку: В файле pbfilechooser.cxx строка 57, указателю присваивается адрес строки, возвращаемый функцией fc->getPattern(). В свою очередь, в файле pbfilechooser.h строка 100, берется указатель от временного объекта, который уничтожается при выходе из getPattern(). В отладчике видно, что при после выполнения строки 61 (ep = iv_readdir(dir)) по адресу указателя pattern появляется другое содержимое, и дальнейшее по коду сравнение строк работает неправильно.
Видимо какие-то изменения в последних обновлениях компилятора привели к тому, что эта ошибка стала проявляться.
Я сделал такое исправление в файле pbfilechooser.cxx:
//const char* pattern = fc->getPattern();
char pattern[128];
strncpy(pattern, fc->getPattern(), 128);
и ошибка исчезла. Исправление не очень, т.к. вообще надо в pbfilechooser.h устранять возвращение указателя на временный объект.
The text was updated successfully, but these errors were encountered: