Address #391. Tested on macOS and Win10.
- Add a check upon opening a file for validity of the file. - Add a new message to indicate that the path is not a file.
This commit is contained in:
parent
6f2fb6e0e7
commit
ce105dcf09
|
@ -101,6 +101,7 @@ extern "C" {
|
|||
*/
|
||||
#define FOREACH_MSG_MISC(FN) \
|
||||
/** File can't be opened */ FN(FILE_CANT_OPEN) \
|
||||
/** Not a file */ FN(FILE_NOT_FILE) \
|
||||
/** line %d column %d */ FN(LINE_COLUMN_STRING) \
|
||||
/** Document content looks like %s */ FN(STRING_CONTENT_LOOKS) \
|
||||
/** discarding */ FN(STRING_DISCARDING) \
|
||||
|
|
|
@ -808,7 +808,7 @@ int TY_(ParseConfigFileEnc)( TidyDocImpl* doc, ctmbstr file, ctmbstr charenc )
|
|||
|
||||
if ( fin == NULL || enc < 0 )
|
||||
{
|
||||
TY_(FileError)( doc, fname, TidyConfig );
|
||||
TY_(FileError)( doc, fname, TidyConfig, FILE_CANT_OPEN );
|
||||
return -1;
|
||||
}
|
||||
else
|
||||
|
|
|
@ -1545,6 +1545,7 @@ static languageDefinition language_en = { whichPluralForm_en, {
|
|||
** @rename enum generator FOREACH_MSG_MISC
|
||||
********************************************/
|
||||
{ FILE_CANT_OPEN, 0, "Can't open \"%s\"\n" },
|
||||
{ FILE_NOT_FILE, 0, "\"%s\" is not a file!\n" },
|
||||
{ LINE_COLUMN_STRING, 0, "line %d column %d - " },
|
||||
{ STRING_CONTENT_LOOKS, 0, "Document content looks like %s" },
|
||||
{/* For example, "discarding invalid UTF-16 surrogate pair" */
|
||||
|
|
|
@ -326,7 +326,7 @@ int TY_(DocParseFileWithMappedFile)( TidyDocImpl* doc, ctmbstr filnam ) {
|
|||
TY_(freeStreamIn)( in );
|
||||
}
|
||||
else /* Error message! */
|
||||
TY_(FileError)( doc, filnam, TidyError );
|
||||
TY_(FileError)( doc, filnam, TidyError, FILE_CANT_OPEN );
|
||||
return status;
|
||||
}
|
||||
|
||||
|
|
|
@ -459,9 +459,9 @@ void TY_(ReportFatal)( TidyDocImpl* doc, Node *element, Node *node, uint code)
|
|||
*********************************************************************/
|
||||
|
||||
|
||||
void TY_(FileError)( TidyDocImpl* doc, ctmbstr file, TidyReportLevel level )
|
||||
void TY_(FileError)( TidyDocImpl* doc, ctmbstr file, TidyReportLevel level, uint code )
|
||||
{
|
||||
TidyMessageImpl *message = TY_(tidyMessageCreate)( doc, FILE_CANT_OPEN, level, file);
|
||||
TidyMessageImpl *message = TY_(tidyMessageCreate)( doc, code, level, file);
|
||||
messageOut( message );
|
||||
}
|
||||
|
||||
|
|
|
@ -59,7 +59,7 @@ void TY_(ReportFatal)(TidyDocImpl* doc, Node* element, Node* node, uint code);
|
|||
/** @{ */
|
||||
|
||||
|
||||
void TY_(FileError)( TidyDocImpl* doc, ctmbstr file, TidyReportLevel level );
|
||||
void TY_(FileError)( TidyDocImpl* doc, ctmbstr file, TidyReportLevel level, uint code );
|
||||
void TY_(ReportAttrError)( TidyDocImpl* doc, Node* node, AttVal* av, uint code );
|
||||
void TY_(ReportBadArgument)( TidyDocImpl* doc, ctmbstr option );
|
||||
void TY_(ReportEncodingError)(TidyDocImpl* doc, uint code, uint c, Bool discarded);
|
||||
|
|
|
@ -903,7 +903,7 @@ FILE* TIDY_CALL tidySetErrorFile( TidyDoc tdoc, ctmbstr errfilnam )
|
|||
return errout;
|
||||
}
|
||||
else /* Emit message to current error sink */
|
||||
TY_(FileError)( impl, errfilnam, TidyError );
|
||||
TY_(FileError)( impl, errfilnam, TidyError, FILE_CANT_OPEN );
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
@ -1068,11 +1068,21 @@ int TIDY_CALL tidyParseSource( TidyDoc tdoc, TidyInputSource* source )
|
|||
|
||||
int tidyDocParseFile( TidyDocImpl* doc, ctmbstr filnam )
|
||||
{
|
||||
int status = -ENOENT;
|
||||
FILE* fin = fopen( filnam, "r+" );
|
||||
|
||||
if ( !fin )
|
||||
{
|
||||
TY_(FileError)( doc, filnam, TidyError, FILE_NOT_FILE );
|
||||
return status;
|
||||
}
|
||||
|
||||
#ifdef _WIN32
|
||||
return TY_(DocParseFileWithMappedFile)( doc, filnam );
|
||||
#else
|
||||
int status = -ENOENT;
|
||||
FILE* fin = fopen( filnam, "rb" );
|
||||
|
||||
fclose( fin );
|
||||
fin = fopen( filnam, "rb" );
|
||||
|
||||
#if PRESERVE_FILE_TIMES
|
||||
struct stat sbuf = {0};
|
||||
|
@ -1099,7 +1109,7 @@ int tidyDocParseFile( TidyDocImpl* doc, ctmbstr filnam )
|
|||
TY_(freeStreamIn)(in);
|
||||
}
|
||||
else /* Error message! */
|
||||
TY_(FileError)( doc, filnam, TidyError );
|
||||
TY_(FileError)( doc, filnam, TidyError, FILE_CANT_OPEN );
|
||||
return status;
|
||||
#endif
|
||||
}
|
||||
|
@ -1213,7 +1223,7 @@ int tidyDocSaveFile( TidyDocImpl* doc, ctmbstr filnam )
|
|||
#endif /* PRESERVFILETIMES */
|
||||
}
|
||||
if ( status < 0 ) /* Error message! */
|
||||
TY_(FileError)( doc, filnam, TidyError );
|
||||
TY_(FileError)( doc, filnam, TidyError, FILE_CANT_OPEN );
|
||||
return status;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue