diff --git a/Source/increadimail_convert.h b/Source/increadimail_convert.h index 6e89423..3787421 100644 --- a/Source/increadimail_convert.h +++ b/Source/increadimail_convert.h @@ -24,6 +24,7 @@ #define MAX_CHAR 256 typedef enum INCREDIMAIL_VERSIONS { + INCREDIMAIL_VERSION_UNKNOWN, INCREDIMAIL_XE, INCREDIMAIL_2, }; diff --git a/Source/incredimail_convert.c b/Source/incredimail_convert.c index b267deb..05e1e8a 100644 --- a/Source/incredimail_convert.c +++ b/Source/incredimail_convert.c @@ -348,7 +348,7 @@ int total_count = 1; enum INCREDIMAIL_VERSIONS FindIncredimailVersion( char *directory_search ) { char temp_path[MAX_CHAR]; -enum INCREDIMAIL_VERSIONS ret; +enum INCREDIMAIL_VERSIONS ret = INCREDIMAIL_VERSION_UNKNOWN; WIN32_FIND_DATA FindFileData; HANDLE hFind; diff --git a/Source/winmain.c b/Source/winmain.c index 4dc413b..a639243 100644 --- a/Source/winmain.c +++ b/Source/winmain.c @@ -586,6 +586,13 @@ enum INCREDIMAIL_VERSION incredimail_version; read_length = ReadOneLine( inputfile, im_database_filename, MAX_CHAR ); // cleaning up the line feeds from FindDatabaseFiles function i = (int) strlen( im_database_filename ); + if (i < 2) { + char msg[MAX_CHAR]; + snprintf(msg, MAX_CHAR, "Ignoring invalid filename %s", im_database_filename); + MessageBox(global_hwnd, msg, "Error!", MB_OK); + continue; + } + im_database_filename[i-2] = 0; if( read_length != 0 ) { @@ -601,6 +608,11 @@ enum INCREDIMAIL_VERSION incredimail_version; pdest = strrchr( im_database_filename, '\\' ); strncpy_s( temp_path, sizeof(temp_path), im_database_filename, strlen( im_database_filename ) - strlen( pdest ) ); incredimail_version = FindIncredimailVersion( temp_path ); + if (incredimail_version == INCREDIMAIL_VERSION_UNKNOWN) { + char msg[CHAR_MAX]; + sprintf_s(msg, CHAR_MAX, "Directory %s doesn't match a known Incredimail version", temp_path); + continue; + } if( incredimail_version == INCREDIMAIL_XE ) { // get the header filename