Bug 1901232 - patch 2 - PrintTarget{PDF,Windows}::EndPage should check for a cairo error status. r=gfx-reviewers,jrmuizel

The call to cairo_surface_show_page() here may fail, setting an error
status on the surface, so we should check for that rather than silently
ignoring the failure.

Differential Revision: https://phabricator.services.mozilla.com/D212918
This commit is contained in:
Jonathan Kew
2024-06-07 14:56:38 +00:00
parent 16846a230f
commit 3b6e6858cd
2 changed files with 9 additions and 5 deletions

View File

@@ -84,12 +84,15 @@ nsresult PrintTargetPDF::BeginPage(const IntSize& aSizeInPoints) {
return NS_ERROR_FAILURE;
}
}
return PrintTarget::BeginPage(aSizeInPoints);
MOZ_ALWAYS_SUCCEEDS(PrintTarget::BeginPage(aSizeInPoints));
return NS_OK;
}
nsresult PrintTargetPDF::EndPage() {
cairo_surface_show_page(mCairoSurface);
return PrintTarget::EndPage();
bool cairoFailure = cairo_surface_status(mCairoSurface);
MOZ_ALWAYS_SUCCEEDS(PrintTarget::EndPage());
return cairoFailure ? NS_ERROR_FAILURE : NS_OK;
}
void PrintTargetPDF::Finish() {

View File

@@ -104,16 +104,17 @@ nsresult PrintTargetWindows::AbortPrinting() {
}
nsresult PrintTargetWindows::BeginPage(const IntSize& aSizeInPoints) {
PrintTarget::BeginPage(aSizeInPoints);
MOZ_ALWAYS_SUCCEEDS(PrintTarget::BeginPage(aSizeInPoints));
int result = ::StartPage(mDC);
return (result <= 0) ? NS_ERROR_FAILURE : NS_OK;
}
nsresult PrintTargetWindows::EndPage() {
cairo_surface_show_page(mCairoSurface);
PrintTarget::EndPage();
bool cairoFailure = cairo_surface_status(mCairoSurface);
MOZ_ALWAYS_SUCCEEDS(PrintTarget::EndPage());
int result = ::EndPage(mDC);
return (result <= 0) ? NS_ERROR_FAILURE : NS_OK;
return (result <= 0 || cairoFailure) ? NS_ERROR_FAILURE : NS_OK;
}
} // namespace gfx