Bug with text.getSelected

I’m having an issue with the mupdf.text.getSelected function.

With certain pdfs, if you select text over multiple paragraphs, then you get the following error:

Uncaught (in promise) TypeError: can't access property "left", u[0] is undefined
    function http://localhost:5173/lib/chunk-R6FPMO7L.js:188
    executeFunction http://localhost:5173/lib/chunk-KUHEKGUW.js:6
    handleFunctionCall http://localhost:5173/lib/chunk-KUHEKGUW.js:6
    listenMessageEvent http://localhost:5173/lib/chunk-KUHEKGUW.js:6
    value http://localhost:5173/lib/chunk-R6FPMO7L.js:188
    next http://localhost:5173/lib/chunk-KUHEKGUW.js:6
    next http://localhost:5173/lib/chunk-R6FPMO7L.js:32
    _next http://localhost:5173/lib/chunk-R6FPMO7L.js:32
    next http://localhost:5173/lib/chunk-R6FPMO7L.js:32
    Ze http://localhost:5173/lib/chunk-R6FPMO7L.js:32
    _next http://localhost:5173/lib/chunk-R6FPMO7L.js:32
    next http://localhost:5173/lib/chunk-R6FPMO7L.js:32
    Ze http://localhost:5173/lib/chunk-R6FPMO7L.js:32
    _next http://localhost:5173/lib/chunk-R6FPMO7L.js:32
    next http://localhost:5173/lib/chunk-R6FPMO7L.js:32
    Re http://localhost:5173/lib/chunk-R6FPMO7L.js:32
    _next http://localhost:5173/lib/chunk-R6FPMO7L.js:32
    next http://localhost:5173/lib/chunk-R6FPMO7L.js:32
    Ze http://localhost:5173/lib/chunk-R6FPMO7L.js:32
    _next http://localhost:5173/lib/chunk-R6FPMO7L.js:32
    next http://localhost:5173/lib/chunk-R6FPMO7L.js:32
    Ze http://localhost:5173/lib/chunk-R6FPMO7L.js:32
    _next http://localhost:5173/lib/chunk-R6FPMO7L.js:32
    next http://localhost:5173/lib/chunk-R6FPMO7L.js:32
    l http://localhost:5173/lib/chunk-R6FPMO7L.js:32
    invokeTask http://localhost:5173/lib/polyfills-SCHOHYNV.js:1
    onInvokeTask http://localhost:5173/lib/chunk-R6FPMO7L.js:36
    invokeTask http://localhost:5173/lib/polyfills-SCHOHYNV.js:1
    runTask http://localhost:5173/lib/polyfills-SCHOHYNV.js:1
    invokeTask http://localhost:5173/lib/polyfills-SCHOHYNV.js:1
    I http://localhost:5173/lib/polyfills-SCHOHYNV.js:1
    x http://localhost:5173/lib/polyfills-SCHOHYNV.js:1
    U http://localhost:5173/lib/polyfills-SCHOHYNV.js:1
    j http://localhost:5173/lib/polyfills-SCHOHYNV.js:1
    scheduleTask http://localhost:5173/lib/polyfills-SCHOHYNV.js:1
    scheduleTask http://localhost:5173/lib/polyfills-SCHOHYNV.js:1
    scheduleEventTask http://localhost:5173/lib/polyfills-SCHOHYNV.js:1
    l http://localhost:5173/lib/polyfills-SCHOHYNV.js:1
    IT</</<[441]</</</</<[54]</</< http://localhost:5173/lib/chunk-R6FPMO7L.js:10
    IT</</<[441]</</</</<[54]</< http://localhost:5173/lib/chunk-R6FPMO7L.js:10
    IT</</<[441]</</</</<[54]< http://localhost:5173/lib/chunk-R6FPMO7L.js:10
    m http://localhost:5173/lib/chunk-R6FPMO7L.js:9
    m http://localhost:5173/lib/chunk-R6FPMO7L.js:9
    IT</</<[441]</</</</<[32]< http://localhost:5173/lib/chunk-R6FPMO7L.js:10
    m http://localhost:5173/lib/chunk-R6FPMO7L.js:9
    m http://localhost:5173/lib/chunk-R6FPMO7L.js:9
    IT</</<[441]</</</</<[31]< http://localhost:5173/lib/chunk-R6FPMO7L.js:10
    m http://localhost:5173/lib/chunk-R6FPMO7L.js:9
    m http://localhost:5173/lib/chunk-R6FPMO7L.js:9
    IT</</<[441]</</</</<[15]< http://localhost:5173/lib/chunk-R6FPMO7L.js:10
    m http://localhost:5173/lib/chunk-R6FPMO7L.js:9
    m http://localhost:5173/lib/chunk-R6FPMO7L.js:9
    IT</</<[441]</</</</<[10]< http://localhost:5173/lib/chunk-R6FPMO7L.js:10
    m http://localhost:5173/lib/chunk-R6FPMO7L.js:9
    d http://localhost:5173/lib/chunk-R6FPMO7L.js:9
    IT</</<[441]</</</< http://localhost:5173/lib/chunk-R6FPMO7L.js:9
    IT</</<[441]</</</< http://localhost:5173/lib/chunk-R6FPMO7L.js:9
    IT</</<[441]</</< http://localhost:5173/lib/chunk-R6FPMO7L.js:9
    IT</</<[441]</< http://localhost:5173/lib/chunk-R6FPMO7L.js:10
    IT</</<[441]< http://localhost:5173/lib/chunk-R6FPMO7L.js:10
    i http://localhost:5173/lib/chunk-R6FPMO7L.js:1
    i http://localhost:5173/lib/chunk-R6FPMO7L.js:1
    IT</</<[144]</</< http://localhost:5173/lib/chunk-R6FPMO7L.js:2
    IT</</<[144]</< http://localhost:5173/lib/chunk-R6FPMO7L.js:2
    IT</</<[144]< http://localhost:5173/lib/chunk-R6FPMO7L.js:2
    i http://localhost:5173/lib/chunk-R6FPMO7L.js:1
    i http://localhost:5173/lib/chunk-R6FPMO7L.js:1
    IT</</<[13]< http://localhost:5173/lib/chunk-R6FPMO7L.js:1
    i http://localhost:5173/lib/chunk-R6FPMO7L.js:1
    i http://localhost:5173/lib/chunk-R6FPMO7L.js:1
    IT</</<[15]< http://localhost:5173/lib/chunk-R6FPMO7L.js:1
    i http://localhost:5173/lib/chunk-R6FPMO7L.js:1
    t http://localhost:5173/lib/chunk-R6FPMO7L.js:1
    IT http://localhost:5173/lib/chunk-R6FPMO7L.js:1
    IT http://localhost:5173/lib/chunk-R6FPMO7L.js:1
    IT http://localhost:5173/lib/chunk-R6FPMO7L.js:1
    pi http://localhost:5173/lib/chunk-R6FPMO7L.js:1
    <anonymous> http://localhost:5173/lib/chunk-R6FPMO7L.js:50
mupdf.js:1:178102
    onclick App.jsx:25
    AsyncFunctionThrow self-hosted:804
    (Async: async)
    apply self-hosted:2253
    _parse mupdf.js:1
    next mupdf.js:1
    next mupdf.js:1
    _next mupdf.js:1
    next mupdf.js:1
    No mupdf.js:1
    _next mupdf.js:1
    next mupdf.js:1
    next mupdf.js:1
    gi mupdf.js:1
    next mupdf.js:1
    next mupdf.js:1
    next mupdf.js:1
    _next mupdf.js:1
    next mupdf.js:1
    No mupdf.js:1
    _next mupdf.js:1
    next mupdf.js:1
    Vi mupdf.js:1
    _next mupdf.js:1
    next mupdf.js:1
    t4 mupdf.js:1
    (Async: EventListener.handleEvent)
    o2 mupdf.js:1
    zi mupdf.js:1
    _trySubscribe mupdf.js:1
    Si mupdf.js:1
    gi mupdf.js:1
    subscribe mupdf.js:1
    Vi mupdf.js:1
    Fi mupdf.js:1
    Si mupdf.js:1
    gi mupdf.js:1
    subscribe mupdf.js:1
    No mupdf.js:1
    Fi mupdf.js:1
    Si mupdf.js:1
    gi mupdf.js:1
    subscribe mupdf.js:1
    _Ho mupdf.js:1
    Fi mupdf.js:1
    Si mupdf.js:1
    gi mupdf.js:1
    subscribe mupdf.js:1
    No mupdf.js:1
    Fi mupdf.js:1
    Si mupdf.js:1
    gi mupdf.js:1
    subscribe mupdf.js:1
    xo mupdf.js:1
    Fi mupdf.js:1
    Si mupdf.js:1
    gi mupdf.js:1

I can’t really debug it since the code is minified.

Here’s a link to a reproduction repo: GitHub - ricky-c-2001/mupdf-webviewer-react-bug-poc

And here’s a video of it in action:

Got it - yes, this is a bug - it seems that if a selection contains an empty line, that line returns empty rects array ([]) and that causes the error.

This should be very easy to fix and we will provide an update to resolve it soon.