Quit using readdir_r()

Prone to buffer overflows on some platforms.
This commit is contained in:
Manuel Pégourié-Gonnard 2013-11-26 16:47:11 +01:00
parent fbae2a1f53
commit 964bf9b92f
2 changed files with 5 additions and 27 deletions

View file

@ -93,17 +93,6 @@
*/
//#define POLARSSL_HAVE_SSE2
/**
* \def POLARSSL_HAVE_READDIR_R
*
* (Non Windows) System has readdir_r().
*
* Required for x509_crt_parse_path() in non-Windows systems.
*
* Comment if your system does not have support.
*/
#define POLARSSL_HAVE_READDIR_R
/**
* \def POLARSSL_HAVE_TIME
*

View file

@ -991,26 +991,20 @@ int x509_crt_parse_path( x509_crt *chain, const char *path )
FindClose( hFind );
#else /* _WIN32 */
#if defined(POLARSSL_HAVE_READDIR_R)
int t_ret, i;
int t_ret;
struct stat sb;
struct dirent entry, *result = NULL;
struct dirent *entry;
char entry_name[255];
DIR *dir = opendir( path );
if( dir == NULL)
return( POLARSSL_ERR_X509_FILE_IO_ERROR );
while( ( t_ret = readdir_r( dir, &entry, &result ) ) == 0 )
while( ( entry = readdir( dir ) ) != NULL )
{
if( result == NULL )
break;
snprintf( entry_name, sizeof entry_name, "%s/%s", path, entry->d_name );
snprintf( entry_name, sizeof(entry_name), "%s/%s", path, entry.d_name );
i = stat( entry_name, &sb );
if( i == -1 )
if( stat( entry_name, &sb ) == -1 )
{
closedir( dir );
return( POLARSSL_ERR_X509_FILE_IO_ERROR );
@ -1028,11 +1022,6 @@ int x509_crt_parse_path( x509_crt *chain, const char *path )
ret += t_ret;
}
closedir( dir );
#else /* POLARSSL_HAVE_READDIR_R */
((void) chain);
((void) path);
ret = POLARSSL_ERR_X509_FEATURE_UNAVAILABLE;
#endif /* POLARSSL_HAVE_READDIR_R */
#endif /* _WIN32 */
return( ret );