diff options
author | herb <herb@google.com> | 2015-12-18 09:52:15 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-12-18 09:52:15 -0800 |
commit | c7a784cc8cb1c1dfcd39a32b2170ffe547904e9f (patch) | |
tree | a4ae39c648dc78dd2562730828e2996d2b03de99 /src/core/SkBitmapProcState.cpp | |
parent | 3e6be16e6d4dda6a27f0e1dbfe7c87fecfbf5577 (diff) |
Fix UB function problems for shaders and mask.
BUG=skia:4634
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1530743002
Committed: https://skia.googlesource.com/skia/+/dafd044e4aea529f88d899247678d4549f776388
Review URL: https://codereview.chromium.org/1530743002
Diffstat (limited to 'src/core/SkBitmapProcState.cpp')
-rw-r--r-- | src/core/SkBitmapProcState.cpp | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/src/core/SkBitmapProcState.cpp b/src/core/SkBitmapProcState.cpp index 487bd80402..c85a5fb992 100644 --- a/src/core/SkBitmapProcState.cpp +++ b/src/core/SkBitmapProcState.cpp @@ -24,14 +24,14 @@ extern const SkBitmapProcState::SampleProc16 gSkBitmapProcStateSample16_neon[]; extern const SkBitmapProcState::SampleProc32 gSkBitmapProcStateSample32_neon[]; extern void S16_D16_filter_DX_neon(const SkBitmapProcState&, const uint32_t*, int, uint16_t*); -extern void Clamp_S16_D16_filter_DX_shaderproc_neon(const SkBitmapProcState&, int, int, uint16_t*, int); -extern void Repeat_S16_D16_filter_DX_shaderproc_neon(const SkBitmapProcState&, int, int, uint16_t*, int); +extern void Clamp_S16_D16_filter_DX_shaderproc_neon(const void *, int, int, uint16_t*, int); +extern void Repeat_S16_D16_filter_DX_shaderproc_neon(const void *, int, int, uint16_t*, int); extern void SI8_opaque_D32_filter_DX_neon(const SkBitmapProcState&, const uint32_t*, int, SkPMColor*); -extern void SI8_opaque_D32_filter_DX_shaderproc_neon(const SkBitmapProcState&, int, int, uint32_t*, int); -extern void Clamp_SI8_opaque_D32_filter_DX_shaderproc_neon(const SkBitmapProcState&, int, int, uint32_t*, int); +extern void SI8_opaque_D32_filter_DX_shaderproc_neon(const void *, int, int, uint32_t*, int); +extern void Clamp_SI8_opaque_D32_filter_DX_shaderproc_neon(const void*, int, int, uint32_t*, int); #endif -extern void Clamp_S32_opaque_D32_nofilter_DX_shaderproc(const SkBitmapProcState&, int, int, uint32_t*, int); +extern void Clamp_S32_opaque_D32_nofilter_DX_shaderproc(const void*, int, int, uint32_t*, int); #define NAME_WRAP(x) x #include "SkBitmapProcState_filter.h" @@ -391,10 +391,11 @@ bool SkBitmapProcState::chooseScanlineProcs(bool trivialMatrix, bool clampClamp, return true; } -static void Clamp_S32_D32_nofilter_trans_shaderproc(const SkBitmapProcState& s, +static void Clamp_S32_D32_nofilter_trans_shaderproc(const void* sIn, int x, int y, SkPMColor* SK_RESTRICT colors, int count) { + const SkBitmapProcState& s = *static_cast<const SkBitmapProcState*>(sIn); SkASSERT(((s.fInvType & ~SkMatrix::kTranslate_Mask)) == 0); SkASSERT(s.fInvKy == 0); SkASSERT(count > 0 && colors != nullptr); @@ -465,10 +466,11 @@ static inline int sk_int_mirror(int x, int n) { return x; } -static void Repeat_S32_D32_nofilter_trans_shaderproc(const SkBitmapProcState& s, +static void Repeat_S32_D32_nofilter_trans_shaderproc(const void* sIn, int x, int y, SkPMColor* SK_RESTRICT colors, int count) { + const SkBitmapProcState& s = *static_cast<const SkBitmapProcState*>(sIn); SkASSERT(((s.fInvType & ~SkMatrix::kTranslate_Mask)) == 0); SkASSERT(s.fInvKy == 0); SkASSERT(count > 0 && colors != nullptr); @@ -505,10 +507,11 @@ static void Repeat_S32_D32_nofilter_trans_shaderproc(const SkBitmapProcState& s, } } -static void S32_D32_constX_shaderproc(const SkBitmapProcState& s, +static void S32_D32_constX_shaderproc(const void* sIn, int x, int y, SkPMColor* SK_RESTRICT colors, int count) { + const SkBitmapProcState& s = *static_cast<const SkBitmapProcState*>(sIn); SkASSERT((s.fInvType & ~(SkMatrix::kTranslate_Mask | SkMatrix::kScale_Mask)) == 0); SkASSERT(s.fInvKy == 0); SkASSERT(count > 0 && colors != nullptr); @@ -618,7 +621,7 @@ static void S32_D32_constX_shaderproc(const SkBitmapProcState& s, sk_memset32(colors, color, count); } -static void DoNothing_shaderproc(const SkBitmapProcState&, int x, int y, +static void DoNothing_shaderproc(const void*, int x, int y, SkPMColor* SK_RESTRICT colors, int count) { // if we get called, the matrix is too tricky, so we just draw nothing sk_memset32(colors, 0, count); @@ -811,8 +814,9 @@ int SkBitmapProcState::maxCountForBufferSize(size_t bufferSize) const { /////////////////////// -void Clamp_S32_opaque_D32_nofilter_DX_shaderproc(const SkBitmapProcState& s, int x, int y, +void Clamp_S32_opaque_D32_nofilter_DX_shaderproc(const void* sIn, int x, int y, SkPMColor* SK_RESTRICT dst, int count) { + const SkBitmapProcState& s = *static_cast<const SkBitmapProcState*>(sIn); SkASSERT((s.fInvType & ~(SkMatrix::kTranslate_Mask | SkMatrix::kScale_Mask)) == 0); |