mirror of
https://gitlab.gnome.org/GNOME/libxml2.git
synced 2025-03-31 06:50:06 +03:00
parser: Also grow comment buffer if SAX is disabled
Fix short-lived regression from 8afd321a, found by OSS-Fuzz.
This commit is contained in:
parent
36374bc9fc
commit
4fc5340ec5
58
parser.c
58
parser.c
@ -5084,37 +5084,33 @@ get_more:
|
||||
* save current set of data
|
||||
*/
|
||||
if (nbchar > 0) {
|
||||
if ((ctxt->sax != NULL) &&
|
||||
(ctxt->disableSAX == 0) &&
|
||||
(ctxt->sax->comment != NULL)) {
|
||||
if (buf == NULL) {
|
||||
if ((*in == '-') && (in[1] == '-'))
|
||||
size = nbchar + 1;
|
||||
else
|
||||
size = XML_PARSER_BUFFER_SIZE + nbchar;
|
||||
buf = (xmlChar *) xmlMallocAtomic(size);
|
||||
if (buf == NULL) {
|
||||
xmlErrMemory(ctxt, NULL);
|
||||
ctxt->instate = state;
|
||||
return;
|
||||
}
|
||||
len = 0;
|
||||
} else if (len + nbchar + 1 >= size) {
|
||||
xmlChar *new_buf;
|
||||
size += len + nbchar + XML_PARSER_BUFFER_SIZE;
|
||||
new_buf = (xmlChar *) xmlRealloc(buf, size);
|
||||
if (new_buf == NULL) {
|
||||
xmlFree (buf);
|
||||
xmlErrMemory(ctxt, NULL);
|
||||
ctxt->instate = state;
|
||||
return;
|
||||
}
|
||||
buf = new_buf;
|
||||
}
|
||||
memcpy(&buf[len], ctxt->input->cur, nbchar);
|
||||
len += nbchar;
|
||||
buf[len] = 0;
|
||||
}
|
||||
if (buf == NULL) {
|
||||
if ((*in == '-') && (in[1] == '-'))
|
||||
size = nbchar + 1;
|
||||
else
|
||||
size = XML_PARSER_BUFFER_SIZE + nbchar;
|
||||
buf = (xmlChar *) xmlMallocAtomic(size);
|
||||
if (buf == NULL) {
|
||||
xmlErrMemory(ctxt, NULL);
|
||||
ctxt->instate = state;
|
||||
return;
|
||||
}
|
||||
len = 0;
|
||||
} else if (len + nbchar + 1 >= size) {
|
||||
xmlChar *new_buf;
|
||||
size += len + nbchar + XML_PARSER_BUFFER_SIZE;
|
||||
new_buf = (xmlChar *) xmlRealloc(buf, size);
|
||||
if (new_buf == NULL) {
|
||||
xmlFree (buf);
|
||||
xmlErrMemory(ctxt, NULL);
|
||||
ctxt->instate = state;
|
||||
return;
|
||||
}
|
||||
buf = new_buf;
|
||||
}
|
||||
memcpy(&buf[len], ctxt->input->cur, nbchar);
|
||||
len += nbchar;
|
||||
buf[len] = 0;
|
||||
}
|
||||
if (len > maxLength) {
|
||||
xmlFatalErrMsgStr(ctxt, XML_ERR_COMMENT_NOT_FINISHED,
|
||||
|
Loading…
x
Reference in New Issue
Block a user