diff -r 89e065397ea6 -r e24348a560a6 src/gui/text/qtextdocument.cpp --- a/src/gui/text/qtextdocument.cpp Thu May 27 13:40:48 2010 +0300 +++ b/src/gui/text/qtextdocument.cpp Fri Jun 11 14:24:45 2010 +0300 @@ -1679,7 +1679,7 @@ return; const QTextDocument *doc = this; - QTextDocument *clonedDoc = 0; + QScopedPointer clonedDoc; (void)doc->documentLayout(); // make sure that there is a layout QRectF body = QRectF(QPointF(0, 0), d->pageSize); @@ -1712,7 +1712,7 @@ printerPageSize.height() / scaledPageSize.height()); } else { doc = clone(const_cast(this)); - clonedDoc = const_cast(doc); + clonedDoc.reset(const_cast(doc)); for (QTextBlock srcBlock = firstBlock(), dstBlock = clonedDoc->firstBlock(); srcBlock.isValid() && dstBlock.isValid(); @@ -1787,7 +1787,7 @@ for (int j = 0; j < pageCopies; ++j) { if (printer->printerState() == QPrinter::Aborted || printer->printerState() == QPrinter::Error) - goto UserCanceled; + return; printPage(page, &p, doc, body, pageNumberPos); if (j < pageCopies - 1) printer->newPage(); @@ -1807,9 +1807,6 @@ if ( i < docCopies - 1) printer->newPage(); } - -UserCanceled: - delete clonedDoc; } #endif