mirror of
https://gitlab.gnome.org/GNOME/libxml2.git
synced 2025-03-31 06:50:06 +03:00
save: Fix handling of catastrophic errors
Don't overwrite catastrophic errors xmlSaveErr. Overwrite non-catastrophic errors in xmlOutputBufferClose.
This commit is contained in:
parent
72f84dd739
commit
0dd910e82b
24
error.c
24
error.c
@ -20,6 +20,30 @@
|
||||
#include "private/globals.h"
|
||||
#include "private/string.h"
|
||||
|
||||
int
|
||||
xmlIsCatastrophicError(int level, int code) {
|
||||
int fatal = 0;
|
||||
|
||||
if (level != XML_ERR_FATAL)
|
||||
return(0);
|
||||
|
||||
switch (code) {
|
||||
case XML_ERR_NO_MEMORY:
|
||||
/* case XML_ERR_RESOURCE_LIMIT: */
|
||||
case XML_ERR_SYSTEM:
|
||||
case XML_ERR_ARGUMENT:
|
||||
case XML_ERR_INTERNAL_ERROR:
|
||||
fatal = 1;
|
||||
break;
|
||||
default:
|
||||
if ((code >= 1500) && (code <= 1599))
|
||||
fatal = 1;
|
||||
break;
|
||||
}
|
||||
|
||||
return(fatal);
|
||||
}
|
||||
|
||||
/************************************************************************
|
||||
* *
|
||||
* Error struct *
|
||||
|
@ -10,6 +10,9 @@
|
||||
|
||||
struct _xmlNode;
|
||||
|
||||
XML_HIDDEN int
|
||||
xmlIsCatastrophicError(int level, int code);
|
||||
|
||||
XML_HIDDEN void
|
||||
xmlRaiseMemoryError(xmlStructuredErrorFunc schannel, xmlGenericErrorFunc channel,
|
||||
void *data, int domain, xmlError *error);
|
||||
|
@ -68,8 +68,6 @@ xmlWarningMsg(xmlParserCtxtPtr ctxt, xmlParserErrors error,
|
||||
XML_HIDDEN void
|
||||
xmlCtxtErrIO(xmlParserCtxtPtr ctxt, int code, const char *uri);
|
||||
XML_HIDDEN int
|
||||
xmlIsCatastrophicError(int level, int code);
|
||||
XML_HIDDEN int
|
||||
xmlCtxtIsCatastrophicError(xmlParserCtxtPtr ctxt);
|
||||
|
||||
XML_HIDDEN void
|
||||
|
@ -256,30 +256,6 @@ xmlCtxtErrIO(xmlParserCtxtPtr ctxt, int code, const char *uri)
|
||||
msg, str1, str2);
|
||||
}
|
||||
|
||||
int
|
||||
xmlIsCatastrophicError(int level, int code) {
|
||||
int fatal = 0;
|
||||
|
||||
if (level != XML_ERR_FATAL)
|
||||
return(0);
|
||||
|
||||
switch (code) {
|
||||
case XML_ERR_NO_MEMORY:
|
||||
/* case XML_ERR_RESOURCE_LIMIT: */
|
||||
case XML_ERR_SYSTEM:
|
||||
case XML_ERR_ARGUMENT:
|
||||
case XML_ERR_INTERNAL_ERROR:
|
||||
fatal = 1;
|
||||
break;
|
||||
default:
|
||||
if ((code >= 1500) && (code <= 1599))
|
||||
fatal = 1;
|
||||
break;
|
||||
}
|
||||
|
||||
return(fatal);
|
||||
}
|
||||
|
||||
int
|
||||
xmlCtxtIsCatastrophicError(xmlParserCtxtPtr ctxt) {
|
||||
if (ctxt == NULL)
|
||||
|
3
xmlIO.c
3
xmlIO.c
@ -1341,7 +1341,8 @@ xmlOutputBufferClose(xmlOutputBufferPtr out)
|
||||
if (out->closecallback != NULL) {
|
||||
int code = out->closecallback(out->context);
|
||||
|
||||
if ((code != XML_ERR_OK) && (out->error == XML_ERR_OK)) {
|
||||
if ((code != XML_ERR_OK) &&
|
||||
(!xmlIsCatastrophicError(XML_ERR_FATAL, out->error))) {
|
||||
if (code < 0)
|
||||
out->error = XML_IO_UNKNOWN;
|
||||
else
|
||||
|
@ -83,8 +83,10 @@ xmlSaveErr(xmlOutputBufferPtr out, int code, xmlNodePtr node,
|
||||
const char *msg = NULL;
|
||||
int res;
|
||||
|
||||
/* Don't overwrite memory errors */
|
||||
if ((out != NULL) && (out->error == XML_ERR_NO_MEMORY))
|
||||
/* Don't overwrite catastrophic errors */
|
||||
if ((out != NULL) &&
|
||||
(out->error != XML_ERR_OK) &&
|
||||
(xmlIsCatastrophicError(XML_ERR_FATAL, out->error)))
|
||||
return;
|
||||
|
||||
if (code == XML_ERR_NO_MEMORY) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user