PyMuPDF icon indicating copy to clipboard operation
PyMuPDF copied to clipboard

regression: fill_textbox: IndexError: pop from empty list

Open cbm755 opened this issue 1 year ago • 4 comments

Description of the bug

On 1.24.3 (but not on 1.24.2) fill_textbox generates some kind of exceptions that print to the screen but do not raise in Python.

How to reproduce the bug

Here's a MWE:

import fitz

print(fitz.version)

doc = fitz.open()
page = doc.new_page()

r = fitz.Rect(-15.0, 43.0, 115.0, 67.0)
tw = fitz.TextWriter(page.rect)

print("\nabout to fill the textbox\n")

excess = tw.fill_textbox(r, "test", fontsize=8, align=fitz.TEXT_ALIGN_CENTER)

print("\nhello, we got here")

On my Fedora 39 system, this gives:

('1.24.3', '1.24.2', '20240509000001')

about to fill the textbox

../../../.local/lib/python3.12/site-packages/pymupdf/__init__.py:87:exception_info: exception_info:
Traceback (most recent call last):
  File "/home/cbm/.local/lib/python3.12/site-packages/pymupdf/utils.py", line 4686, in fill_textbox
    line, tl = new_lines.pop(0)
               ^^^^^^^^^^^^^^^^
IndexError: pop from empty list

hello, we got here

I've also seen this on Ubuntu 22.04.

PyMuPDF version

1.24.3

Operating system

Linux

Python version

3.12

cbm755 avatar May 15 '24 06:05 cbm755

The box details don't matter too much. Here's an updated version that shows the file is actually written, and contains the text. Not sure if this is harmful or just cosmetic.

import fitz

print(fitz.version)

doc = fitz.open()
page = doc.new_page()

r = fitz.Rect(10, 10, 300, 300)
tw = fitz.TextWriter(page.rect)

print("\nabout to fill the textbox\n")

excess = tw.fill_textbox(r, "blah blah blah blah")
print(excess)

tw.write_text(page, color=(0, 0, 0))

print("\nhello, we got here")

doc.save("foo.pdf")

cbm755 avatar May 15 '24 06:05 cbm755

Still true in 1.24.4

cbm755 avatar May 19 '24 15:05 cbm755

Thanks for this, i've reproduced it. Investigating some more now.

It turns out that this is a change of a diagnostic, not a change in behaviour.

I've disabled the diagnostic in my tree so it'll won't appear in a future release.

Fixed in 1.24.5.