[OpenJDK 2D-Dev] Request for review: [NEW BUG] Printer spoolers ignore result from spool process

Phil Race philip.race at oracle.com
Thu Oct 20 19:20:30 UTC 2011


You are throwing an IOException and we already have the code to catch
that and re-throw as the documented printer exception type, and also the 
event should
get notified to any listeners.  So far so good.

But you are throwing the IOException before calling spoolFile.delete() 
so we'll leak
the spool file.
Arguably that could happen anyway if there were an Exception but that was
probably not occurring previously.

I suggest either to move the spoolfile.delete() to *before* the 
handleError call
or into a finally { } block.


On 10/20/2011 11:56 AM, Neil Richards wrote:
> Hi all,
> Whilst trying to debug a printing problem, I noticed that the (Unix and
> PostScript) printer spoolers in Java do not check what the result is of
> trying to launch the OS print spooler command (often 'lpr' or 'lp').
> As a result, if that exec'd command fails for any reason, that result
> (and that reason) is lost, and the user left without any clue that
> something is amiss.
> To address this, I've created a suggested fix [1], which checks the exit
> code for the exec'd command and, if it's bad, throws an exception which
> captures any text from the command's error stream.
> It does this in both sun.print.PSPrinterJob and sun.print.UnixPrinterJob
> (they are very similar in composition and function).
> Please review this suggested change.
> Thanks, Neil
> [1] http://cr.openjdk.java.net/~ngmr/ojdk-201/webrev.01/index.html

More information about the 2d-dev mailing list