Merge pull request #6571 from hiddenasbestos/retro_opendir_r2

retro_opendir - Improved fix for bad input
This commit is contained in:
Twinaphex 2018-04-13 18:47:02 +02:00 committed by GitHub
commit 4c39a7fd78
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 18 additions and 6 deletions

View File

@ -106,14 +106,16 @@ struct RDIR *retro_opendir(const char *name)
wchar_t *path_wide = NULL; wchar_t *path_wide = NULL;
unsigned path_len; unsigned path_len;
#endif #endif
struct RDIR *rdir = (struct RDIR*)calloc(1, sizeof(*rdir)); struct RDIR *rdir;
if (!rdir||!name) /*Reject null or empty string paths*/
{ if (!name||(*name==0))
if (rdir) return NULL;
free(rdir);
/*Allocate RDIR struct. Tidied later with retro_closedir*/
rdir = (struct RDIR*)calloc(1, sizeof(*rdir));
if (!rdir)
return NULL; return NULL;
}
#if defined(_WIN32) #if defined(_WIN32)
(void)path_wide; (void)path_wide;

View File

@ -32,6 +32,16 @@ RETRO_BEGIN_DECLS
typedef struct RDIR RDIR; typedef struct RDIR RDIR;
/**
*
* retro_opendir:
* @name : path to the directory to open.
*
* Opens a directory for reading. Tidy up with retro_closedir.
*
* Returns: RDIR pointer on success, NULL if name is not a
* valid directory, null itself or the empty string.
*/
struct RDIR *retro_opendir(const char *name); struct RDIR *retro_opendir(const char *name);
int retro_readdir(struct RDIR *rdir); int retro_readdir(struct RDIR *rdir);