biologist79 / ESPuino

RFID-controlled musicplayer powered by ESP32

Home Page:https://forum.espuino.de

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

crash on reading empty "playlistcache" + bugfix

tueddy opened this issue · comments

I have an empty playlistcache-file in folder (don't know why empty but it's in place!) and get this crash playing via web contextmenu "Abspielen":

Decoding stack results
0x4009414b: strncmp at /builds/idf/crosstool-NG/.build/HOST-x86_64-w64-mingw32/xtensa-esp32-elf/src/newlib/newlib/libc/string/strncmp.c line 60
0x400d88cf: fileValid(char const*) at src/Common.h line 33
0x400d8ed2: SdCard_ReturnPlaylist(char const*, unsigned int) at src/SdCard.cpp line 291
0x400d4bb9: AudioPlayer_TrackQueueDispatcher(char const*, unsigned int, unsigned int, unsigned short) at src/AudioPlayer.cpp line 854
0x400daf01: explorerHandleAudioRequest(AsyncWebServerRequest*) at src/Web.cpp line 1121`

tested bugfix check for valid "subst" in SdCard.cpp :

// Check if file-type is correct
bool fileValid(const char *_fileItem) {
    const char ch = '/';
    // Don't use files that start with .
    char *subst;
    subst = strrchr(_fileItem, ch); 
    if (subst &&(!startsWith(subst, (char *) "/."))) // subst can be NULL !
      return false;
    return (endsWith(_fileItem, ".mp3") || endsWith(_fileItem, ".MP3") ||
            endsWith(_fileItem, ".aac") || endsWith(_fileItem, ".AAC") ||
            endsWith(_fileItem, ".m3u") || endsWith(_fileItem, ".M3U") ||
            endsWith(_fileItem, ".m4a") || endsWith(_fileItem, ".M4A") ||
            endsWith(_fileItem, ".wav") || endsWith(_fileItem, ".WAV") ||
            endsWith(_fileItem, ".flac") || endsWith(_fileItem, ".FLAC") ||
            endsWith(_fileItem, ".asx") || endsWith(_fileItem, ".ASX"));
}

Then the faulty playlistcache file is regenerated successfully.

Best
tueddy

Dieser Crash trat nur mit Arduino 2.0.4 auf, dort hat sich das Dateisystem geändert (Angleichung mit SPIFS/LittleFS ?).

file.name() liefert jetzt den Dateinamen ohne führenden Slash zurück, die ESPuino Funktion fileValid() crasht dann.
Das Problem wird sich beim Wechsel auf die aktuelle Arduino Version erübrigen, daher schließe ich das hier.

Arduino 1.0.6, file.name(): "/folder/filename.mp3"
Arduino 2.0.4, file.name(): "filename.mp3"

Arduino 2.0.4, file.path(): "/folder/filename.mp3"

Bugfix wird sein in der neuen Version file.name() durch file.path() zu ersetzen.
Schöne Grüße
tueddy