ietf-tools / xml2rfc

Generate RFCs and IETF drafts from document source in XML according to the IETF xml2rfc v2 and v3 vocabularies
https://ietf-tools.github.io/xml2rfc/
BSD 3-Clause "New" or "Revised" License
65 stars 38 forks source link

text rendering of table leads to crash #740

Open alicerusso opened 2 years ago

alicerusso commented 2 years ago

complex table renders ok in HTML and PDF, but crashes when making text.

When using <table> in XML:

TXT: crashes w/ Traceback as follows.

  File "/usr/bin/xml2rfc", line 8, in <module>
    sys.exit(main())
  File "/usr/lib/python3.6/site-packages/xml2rfc/run.py", line 742, in main
    writer.write(filename)
  File "/usr/lib/python3.6/site-packages/xml2rfc/writers/text.py", line 343, in write
    text = self.process()
  File "/usr/lib/python3.6/site-packages/xml2rfc/writers/text.py", line 301, in process
    lines = self.render(self.root, width=72, joiners=joiners)
  File "/usr/lib/python3.6/site-packages/xml2rfc/writers/text.py", line 367, in render
    res = func(e, width, **kwargs)
  File "/usr/lib/python3.6/site-packages/xml2rfc/writers/text.py", line 3054, in render_rfc
    lines = self.ljoin(lines, c, width, **kwargs)
  File "/usr/lib/python3.6/site-packages/xml2rfc/writers/text.py", line 554, in ljoin
    res = mklines(self.render(e, width, **kwargs), e)
  File "/usr/lib/python3.6/site-packages/xml2rfc/writers/text.py", line 367, in render
    res = func(e, width, **kwargs)
  File "/usr/lib/python3.6/site-packages/xml2rfc/writers/text.py", line 2232, in render_middle
    lines = self.ljoin(lines, c, width, **kwargs)
  File "/usr/lib/python3.6/site-packages/xml2rfc/writers/text.py", line 554, in ljoin
    res = mklines(self.render(e, width, **kwargs), e)
  File "/usr/lib/python3.6/site-packages/xml2rfc/writers/text.py", line 367, in render
    res = func(e, width, **kwargs)
  File "/usr/lib/python3.6/site-packages/xml2rfc/writers/text.py", line 3325, in render_section
    lines = self.ljoin(lines, c, width, **kwargs)
  File "/usr/lib/python3.6/site-packages/xml2rfc/writers/text.py", line 554, in ljoin
    res = mklines(self.render(e, width, **kwargs), e)
  File "/usr/lib/python3.6/site-packages/xml2rfc/writers/text.py", line 367, in render
    res = func(e, width, **kwargs)
  File "/usr/lib/python3.6/site-packages/xml2rfc/writers/text.py", line 4250, in render_table
    lines = self.build_table(e, width, **kwargs)
  File "/usr/lib/python3.6/site-packages/xml2rfc/writers/text.py", line 4143, in build_table
    k, l = cell.origin
AttributeError: 'Cell' object has no attribute 'origin'
kesara commented 2 years ago

This seems to happen because table cells are unbalanced. Some raws are not fully covering the required number of cells.

With the proposed change, xml2rfc would die with the following error rather than crashing.

draft-zia-route-table2.xml(33): Error: Inconsistent table width: Found different row lengths in this table
Unable to complete processing drafts/draft-zia-route-table2.xml

I will look into improving this error message to give more context.

cabo commented 2 years ago

I cannot find anything in RFC 7991 that would require that table rows are of the same length. So I don't know why this is an error. (Throwing a "not implemented" message certainly is better than crashing, but it seems to me there is still work to be done after that PR is merged.)