lxml on Windows crashes with large file

Bug #1663890 reported by Charlie_X
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
lxml
Triaged
Undecided
Unassigned

Bug Description

Using xmlfile to write a large file and hitting problems on Windows. I guess there's a memory problem. This is using lxml 3.7.2. The source file can be got from https://bitbucket.org/openpyxl/openpyxl/issues/494

Python : sys.version_info(major=3, minor=4, micro=4, releaselevel='
final', serial=0)
lxml.etree : (3, 7, 2, 0)
libxml used : (2, 9, 4)
libxml compiled : (2, 9, 4)
libxslt used : (1, 1, 29)
libxslt compiled : (1, 1, 29)

Traceback:

Python 3.4.4 (v3.4.4:737efcadf5a6, Dec 20 2015, 19:28:18) [MSC v.1600 32 bit (In
tel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from openpyxl import load_workbook
>>> wb = load_workbook(r"Z:\Projects\openpyxl\Issues\bug494.xlsx")
>>> wb.save("bug494-win.xlsx")
Traceback (most recent call last):
  File "C:\openpyxl\openpyxl\writer\etree_worksheet.py", line 56, in write_row
    el = write_cell(xf, worksheet, cell, cell.has_style)
  File "C:\openpyxl\openpyxl\writer\etree_worksheet.py", line 118, in lxml_write
_cell
    with xf.element('c', attributes):
  File "src\lxml\serializer.pxi", line 1228, in lxml.etree._FileWriterElement.__
enter__ (src\lxml\lxml.etree.c:146096)
  File "src\lxml\serializer.pxi", line 1064, in lxml.etree._IncrementalFileWrite
r._write_start_element (src\lxml\lxml.etree.c:143370)
  File "src\lxml\serializer.pxi", line 1213, in lxml.etree._IncrementalFileWrite
r._handle_error (src\lxml\lxml.etree.c:145890)
  File "src\lxml\lxml.etree.pyx", line 324, in lxml.etree._ExceptionContext._rai
se_if_stored (src\lxml\lxml.etree.c:12064)
  File "src\lxml\serializer.pxi", line 643, in lxml.etree._FilelikeWriter.write
(src\lxml\lxml.etree.c:137506)
MemoryError

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\openpyxl\openpyxl\writer\etree_worksheet.py", line 36, in write_rows
    write_row(xf, worksheet, row, row_idx, max_column)
  File "C:\openpyxl\openpyxl\writer\etree_worksheet.py", line 56, in write_row
    el = write_cell(xf, worksheet, cell, cell.has_style)
  File "src\lxml\serializer.pxi", line 1231, in lxml.etree._FileWriterElement.__
exit__ (src\lxml\lxml.etree.c:146212)
  File "src\lxml\serializer.pxi", line 1107, in lxml.etree._IncrementalFileWrite
r._write_end_element (src\lxml\lxml.etree.c:144205)
  File "src\lxml\serializer.pxi", line 1214, in lxml.etree._IncrementalFileWrite
r._handle_error (src\lxml\lxml.etree.c:145908)
  File "src\lxml\serializer.pxi", line 195, in lxml.etree._raiseSerialisationErr
or (src\lxml\lxml.etree.c:133135)
lxml.etree.SerialisationError: IO_WRITE

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\openpyxl\openpyxl\writer\worksheet.py", line 108, in write_worksheet
    write_rows(xf, ws)
  File "C:\openpyxl\openpyxl\writer\etree_worksheet.py", line 36, in write_rows
    write_row(xf, worksheet, row, row_idx, max_column)
  File "src\lxml\serializer.pxi", line 1231, in lxml.etree._FileWriterElement.__
exit__ (src\lxml\lxml.etree.c:146212)
  File "src\lxml\serializer.pxi", line 1107, in lxml.etree._IncrementalFileWrite
r._write_end_element (src\lxml\lxml.etree.c:144205)
  File "src\lxml\serializer.pxi", line 1214, in lxml.etree._IncrementalFileWrite
r._handle_error (src\lxml\lxml.etree.c:145908)
  File "src\lxml\serializer.pxi", line 195, in lxml.etree._raiseSerialisationErr
or (src\lxml\lxml.etree.c:133135)
lxml.etree.SerialisationError: IO_WRITE

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\openpyxl\openpyxl\workbook\workbook.py", line 342, in save
    save_workbook(self, filename)
  File "C:\openpyxl\openpyxl\writer\excel.py", line 268, in save_workbook
    writer.save(filename)
  File "C:\openpyxl\openpyxl\writer\excel.py", line 250, in save
    self.write_data()
  File "C:\openpyxl\openpyxl\writer\excel.py", line 81, in write_data
    self._write_worksheets()
  File "C:\openpyxl\openpyxl\writer\excel.py", line 199, in _write_worksheets
    xml = ws._write()
  File "C:\openpyxl\openpyxl\worksheet\worksheet.py", line 870, in _write
    return write_worksheet(self)
  File "C:\openpyxl\openpyxl\writer\worksheet.py", line 177, in write_worksheet
    xf.write(tables.to_tree())
  File "src\lxml\serializer.pxi", line 1231, in lxml.etree._FileWriterElement.__
exit__ (src\lxml\lxml.etree.c:146212)
  File "src\lxml\serializer.pxi", line 1107, in lxml.etree._IncrementalFileWrite
r._write_end_element (src\lxml\lxml.etree.c:144205)
  File "src\lxml\serializer.pxi", line 1214, in lxml.etree._IncrementalFileWrite
r._handle_error (src\lxml\lxml.etree.c:145908)
  File "src\lxml\serializer.pxi", line 195, in lxml.etree._raiseSerialisationErr
or (src\lxml\lxml.etree.c:133135)
lxml.etree.SerialisationError: IO_WRITE

Revision history for this message
scoder (scoder) wrote :

Sorry for looking at this so late, but this probably isn't writing to a file on disk directly, right? Is this writing to an in-memory file-like object in some way?

Changed in lxml:
status: New → Triaged
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.