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:
@@ -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() {
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user