sk_sp<SkSpecialSurface> SkSpecialSurface::MakeFromBitmap(const SkIRect& subset, SkBitmap& bm,
const SkSurfaceProps* props) {
+ if (subset.isEmpty() || !SkSurfaceValidateRasterInfo(bm.info(), bm.rowBytes())) {
+ return nullptr;
+ }
return sk_make_sp<SkSpecialSurface_Raster>(bm.info(), sk_ref_sp(bm.pixelRef()), subset, props);
}
sk_sp<SkSpecialSurface> SkSpecialSurface::MakeRaster(const SkImageInfo& info,
const SkSurfaceProps* props) {
+ if (!SkSurfaceValidateRasterInfo(info)) {
+ return nullptr;
+ }
+
sk_sp<SkPixelRef> pr = SkMallocPixelRef::MakeZeroed(info, 0, nullptr);
if (!pr) {
return nullptr;
#include "SkSurfaceProps.h"
+struct SkImageInfo;
+
static inline SkSurfaceProps SkSurfacePropsCopyOrDefault(const SkSurfaceProps* props) {
if (props) {
return *props;
return SkSurfaceProps(SkSurfaceProps::kLegacyFontHost_InitType).pixelGeometry();
}
+constexpr size_t kIgnoreRowBytesValue = static_cast<size_t>(~0);
+
+bool SkSurfaceValidateRasterInfo(const SkImageInfo&, size_t rb = kIgnoreRowBytesValue);
+
#endif
#include "SkDevice.h"
#include "SkMallocPixelRef.h"
-static const size_t kIgnoreRowBytesValue = (size_t)~0;
-
class SkSurface_Raster : public SkSurface_Base {
public:
- static bool Valid(const SkImageInfo&, size_t rb = kIgnoreRowBytesValue);
-
SkSurface_Raster(const SkImageInfo&, void*, size_t rb,
void (*releaseProc)(void* pixels, void* context), void* context,
const SkSurfaceProps*);
///////////////////////////////////////////////////////////////////////////////
-bool SkSurface_Raster::Valid(const SkImageInfo& info, size_t rowBytes) {
+bool SkSurfaceValidateRasterInfo(const SkImageInfo& info, size_t rowBytes) {
if (info.isEmpty()) {
return false;
}
if (nullptr == releaseProc) {
context = nullptr;
}
- if (!SkSurface_Raster::Valid(info, rb)) {
+ if (!SkSurfaceValidateRasterInfo(info, rb)) {
return nullptr;
}
if (nullptr == pixels) {
sk_sp<SkSurface> SkSurface::MakeRaster(const SkImageInfo& info, size_t rowBytes,
const SkSurfaceProps* props) {
- if (!SkSurface_Raster::Valid(info)) {
+ if (!SkSurfaceValidateRasterInfo(info)) {
return nullptr;
}