summaryrefslogtreecommitdiff
path: root/src/lxml
diff options
context:
space:
mode:
authorStefan Behnel <stefan_ml@behnel.de>2020-05-11 22:05:56 +0200
committerStefan Behnel <stefan_ml@behnel.de>2020-05-11 22:05:56 +0200
commitcfceec54a8d5b684e2572b02addf0adf5e786f2f (patch)
treeaa2d80dec27d8423495ecbd79c5933273f716e7a /src/lxml
parent809e856640c6c1fe27b5962b61f9214f4f4c1ec2 (diff)
downloadpython-lxml-cfceec54a8d5b684e2572b02addf0adf5e786f2f.tar.gz
Make it less likely that the serialisation of large documents (> MAX_INT) is considered a failure due to C integer wrap-around.
Diffstat (limited to 'src/lxml')
-rw-r--r--src/lxml/serializer.pxi8
-rw-r--r--src/lxml/xslt.pxi2
2 files changed, 6 insertions, 4 deletions
diff --git a/src/lxml/serializer.pxi b/src/lxml/serializer.pxi
index 4954a40c..3a26f752 100644
--- a/src/lxml/serializer.pxi
+++ b/src/lxml/serializer.pxi
@@ -147,7 +147,7 @@ cdef _tostring(_Element element, encoding, doctype, method,
c_result_buffer))[:tree.xmlBufUse(c_result_buffer)]
finally:
error_result = tree.xmlOutputBufferClose(c_buffer)
- if error_result < 0:
+ if error_result == -1:
_raiseSerialisationError(error_result)
return result
@@ -770,7 +770,7 @@ cdef int _serialise_node(tree.xmlOutputBuffer* c_buffer, const_xmlChar* c_doctyp
error_result = c_buffer.error
if error_result == xmlerror.XML_ERR_OK:
error_result = tree.xmlOutputBufferClose(c_buffer)
- if error_result > 0:
+ if error_result != -1:
error_result = xmlerror.XML_ERR_OK
else:
tree.xmlOutputBufferClose(c_buffer)
@@ -870,6 +870,8 @@ cdef _tofilelikeC14N(f, _Element element, bint exclusive, bint with_comments,
error = tree.xmlOutputBufferClose(c_buffer)
if bytes_count < 0:
error = bytes_count
+ elif error != -1:
+ error = xmlerror.XML_ERR_OK
else:
raise TypeError(f"File or filename expected, got '{python._fqtypename(f).decode('UTF-8')}'")
finally:
@@ -1674,7 +1676,7 @@ cdef class _IncrementalFileWriter:
error_result = self._c_out.error
if error_result == xmlerror.XML_ERR_OK:
error_result = tree.xmlOutputBufferClose(self._c_out)
- if error_result > 0:
+ if error_result != -1:
error_result = xmlerror.XML_ERR_OK
else:
tree.xmlOutputBufferClose(self._c_out)
diff --git a/src/lxml/xslt.pxi b/src/lxml/xslt.pxi
index ce187a9b..e7b49600 100644
--- a/src/lxml/xslt.pxi
+++ b/src/lxml/xslt.pxi
@@ -744,7 +744,7 @@ cdef class _XSLTResultTree(_ElementTree):
rclose = tree.xmlOutputBufferClose(c_buffer)
if writer is not None:
writer._exc_context._raise_if_stored()
- if r < 0 or rclose < 0:
+ if r < 0 or rclose == -1:
python.PyErr_SetFromErrno(IOError) # raises IOError
cdef _saveToStringAndSize(self, xmlChar** s, int* l):