[PictureLoader] Fix custom-folder pictures in subdirectories not loading (#7340)
Some checks are pending
CodeQL / Analyze (cpp) (push) Waiting to run
CodeQL / Analyze (actions) (push) Waiting to run
Build Desktop / Configure (push) Waiting to run
Build Desktop / Debian 13 (push) Blocked by required conditions
Build Desktop / Debian 12 (push) Blocked by required conditions
Build Desktop / Fedora 44 (push) Blocked by required conditions
Build Desktop / Fedora 43 (push) Blocked by required conditions
Build Desktop / Servatrice_Debian 12 (push) Blocked by required conditions
Build Desktop / Ubuntu 26.04 (push) Blocked by required conditions
Build Desktop / Ubuntu 24.04 (push) Blocked by required conditions
Build Desktop / Arch (push) Blocked by required conditions
Build Desktop / macOS 13 Intel (push) Blocked by required conditions
Build Desktop / macOS 14 (push) Blocked by required conditions
Build Desktop / macOS 15 (push) Blocked by required conditions
Build Desktop / macOS 26 Debug (push) Blocked by required conditions
Build Desktop / Windows 10 (push) Blocked by required conditions
Build Docker / Servatrice (arm) (push) Waiting to run
Build Docker / Servatrice (x86) (push) Waiting to run
Build Docker / Publish multi-platform Servatrice image (push) Blocked by required conditions

CardPictureLoaderLocal compared the full file name (including extension)
of the custom-folder candidate against the extension-stripped base name of
each directory entry, so a CUSTOM subfolder image like
pics/CUSTOM/poker/1 of Hearts.png never matched and the card fell through
to the network. Compare the complete base names instead.

Add matcher tests covering CUSTOM subfolder resolution.

Co-authored-by: Lukas Brübach <Bruebach.Lukas@bdosecurity.de>
This commit is contained in:
BruebachL 2026-09-21 21:48:34 +02:00 committed by GitHub
parent e97ef5a617
commit 7a41dfe175
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 35 additions and 1 deletions

View file

@ -68,6 +68,18 @@ protected:
loader = nullptr;
}
/**
* @brief Destroys and rebuilds the loader so the CUSTOM index is re-scanned.
*
* The CUSTOM-folder index is snapshotted at construction; rebuild it after
* writing files so freshly placed images are discoverable.
*/
void rebuildLoader()
{
delete loader;
loader = new CardPictureLoaderLocal(nullptr);
}
/**
* @brief Writes a valid 1x1 PNG under the sandboxed pics path.
*/
@ -162,6 +174,28 @@ TEST_F(LocalMatcherTest, SetFolderCandidateTakesPrecedenceOverRootFallback)
EXPECT_EQ(image.pixelColor(0, 0), QColor(Qt::red)) << "The set-folder candidate must be preferred";
}
TEST_F(LocalMatcherTest, CustomSubfolderResolvesExactFile)
{
// Images in the CUSTOM folder are indexed by their full file path (extension included),
// unlike the extension-less candidate paths built from the naming schemes.
writePngUnderPics("CUSTOM/poker/TestCard.png");
rebuildLoader();
const QImage image = loader->tryLoad(cardFor("TestCard", "", ""));
EXPECT_FALSE(image.isNull()) << "A CUSTOM-folder image in a subdirectory must resolve";
}
TEST_F(LocalMatcherTest, CustomSubfolderIgnoresSuffixedFiles)
{
writePngUnderPics("CUSTOM/poker/TestCard (1).png");
rebuildLoader();
const QImage image = loader->tryLoad(cardFor("TestCard", "", ""));
EXPECT_TRUE(image.isNull()) << "A suffixed CUSTOM-folder file must not satisfy an exact name lookup";
}
} // namespace
int main(int argc, char **argv)