mirror of
https://github.com/Relintai/sdl2_frt.git
synced 2024-12-25 09:17:12 +01:00
0e45984fa0
The internal function SDL_EGL_LoadLibrary() did not delete and remove a mostly uninitialized data structure if loading the library first failed. A later try to use EGL then skipped initialization and assumed it was previously successful because the data structure now already existed. This led to at least one crash in the internal function SDL_EGL_ChooseConfig() because a NULL pointer was dereferenced to make a call to eglBindAPI().
137 lines
3.8 KiB
C
137 lines
3.8 KiB
C
/* See COPYING.txt for the full license governing this code. */
|
|
/**
|
|
* \file screenshot.c
|
|
*
|
|
* Source file for the screenshot API.
|
|
*/
|
|
|
|
#include "SDL_visualtest_mischelper.h"
|
|
#include <SDL_test.h>
|
|
|
|
int
|
|
SDLVisualTest_VerifyScreenshots(char* args, char* test_dir, char* verify_dir)
|
|
{
|
|
int i, verify_len, return_code, test_len;
|
|
char hash[33];
|
|
char* verify_path; /* path to the bmp file used for verification */
|
|
char* test_path; /* path to the bmp file to be verified */
|
|
SDL_RWops* rw;
|
|
SDL_Surface* verifybmp;
|
|
|
|
return_code = 1;
|
|
|
|
if(!args)
|
|
{
|
|
SDLTest_LogError("args argument cannot be NULL");
|
|
return_code = -1;
|
|
goto verifyscreenshots_cleanup_generic;
|
|
}
|
|
if(!test_dir)
|
|
{
|
|
SDLTest_LogError("test_dir argument cannot be NULL");
|
|
return_code = -1;
|
|
goto verifyscreenshots_cleanup_generic;
|
|
}
|
|
if(!verify_dir)
|
|
{
|
|
SDLTest_LogError("verify_dir argument cannot be NULL");
|
|
return_code = -1;
|
|
goto verifyscreenshots_cleanup_generic;
|
|
}
|
|
|
|
/* generate the MD5 hash */
|
|
SDLVisualTest_HashString(args, hash);
|
|
|
|
/* find the verification image */
|
|
/* path_len + hash_len + some number of extra characters */
|
|
verify_len = SDL_strlen(verify_dir) + 32 + 10;
|
|
verify_path = (char*)SDL_malloc(verify_len * sizeof(char));
|
|
if(!verify_path)
|
|
{
|
|
SDLTest_LogError("malloc() failed");
|
|
return_code = -1;
|
|
goto verifyscreenshots_cleanup_generic;
|
|
}
|
|
SDL_snprintf(verify_path, verify_len - 1,
|
|
"%s/%s.bmp", verify_dir, hash);
|
|
rw = SDL_RWFromFile(verify_path, "rb");
|
|
if(!rw)
|
|
{
|
|
SDLTest_Log("Verification image does not exist."
|
|
" Please manually verify that the SUT is working correctly.");
|
|
return_code = 2;
|
|
goto verifyscreenshots_cleanup_verifypath;
|
|
}
|
|
|
|
/* load the verification image */
|
|
verifybmp = SDL_LoadBMP_RW(rw, 1);
|
|
if(!verifybmp)
|
|
{
|
|
SDLTest_LogError("SDL_LoadBMP_RW() failed");
|
|
return_code = -1;
|
|
goto verifyscreenshots_cleanup_verifypath;
|
|
}
|
|
|
|
/* load the test images and compare with the verification image */
|
|
/* path_len + hash_len + some number of extra characters */
|
|
test_len = SDL_strlen(test_dir) + 32 + 10;
|
|
test_path = (char*)SDL_malloc(test_len * sizeof(char));
|
|
if(!test_path)
|
|
{
|
|
SDLTest_LogError("malloc() failed");
|
|
return_code = -1;
|
|
goto verifyscreenshots_cleanup_verifybmp;
|
|
}
|
|
|
|
for(i = 1; ; i++)
|
|
{
|
|
SDL_RWops* testrw;
|
|
SDL_Surface* testbmp;
|
|
|
|
if(i == 1)
|
|
SDL_snprintf(test_path, test_len - 1, "%s/%s.bmp", test_dir, hash);
|
|
else
|
|
SDL_snprintf(test_path, test_len - 1, "%s/%s_%d.bmp", test_dir, hash, i);
|
|
testrw = SDL_RWFromFile(test_path, "rb");
|
|
|
|
/* we keep going until we've iterated through the screenshots each
|
|
SUT window */
|
|
if(!testrw)
|
|
break;
|
|
|
|
/* load the test screenshot */
|
|
testbmp = SDL_LoadBMP_RW(testrw, 1);
|
|
if(!testbmp)
|
|
{
|
|
SDLTest_LogError("SDL_LoadBMP_RW() failed");
|
|
return_code = -1;
|
|
goto verifyscreenshots_cleanup_verifybmp;
|
|
}
|
|
|
|
/* compare with the verification image */
|
|
if(SDLTest_CompareSurfaces(testbmp, verifybmp, 0) != 0)
|
|
{
|
|
return_code = 0;
|
|
SDL_FreeSurface(testbmp);
|
|
goto verifyscreenshots_cleanup_verifybmp;
|
|
}
|
|
|
|
SDL_FreeSurface(testbmp);
|
|
}
|
|
|
|
if(i == 1)
|
|
{
|
|
SDLTest_LogError("No verification images found");
|
|
return_code = -1;
|
|
}
|
|
|
|
verifyscreenshots_cleanup_verifybmp:
|
|
SDL_FreeSurface(verifybmp);
|
|
|
|
verifyscreenshots_cleanup_verifypath:
|
|
SDL_free(verify_path);
|
|
|
|
verifyscreenshots_cleanup_generic:
|
|
return return_code;
|
|
}
|