Skip to content
This repository was archived by the owner on Aug 31, 2021. It is now read-only.

Commit 32f8fef

Browse files
committed
Use signed stride to avoid breaking pointer math on 64-bit
1 parent 6eaf9b8 commit 32f8fef

File tree

3 files changed

+20
-17
lines changed

3 files changed

+20
-17
lines changed

engine/src/bitmapeffect.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1391,18 +1391,21 @@ static MCBitmapEffectCompositeCallback MCBitmapEffectChooseCompositer(MCBitmapEf
13911391
static void MCBitmapEffectRender(MCBitmapEffectRenderState& state, MCBitmapEffectLayer& dst, MCBitmapEffectLayer& src)
13921392
{
13931393
// Compute the dst ptr/stride in pixels.
1394-
uint32_t t_dst_stride, *t_dst_pixels;
1394+
int32_t t_dst_stride;
13951395
t_dst_stride = dst . stride / 4;
1396+
uint32_t *t_dst_pixels;
13961397
t_dst_pixels = (uint4 *)dst . bits + t_dst_stride * (state . region . y - dst . bounds . y) + (state . region . x - dst . bounds . x);
13971398

13981399
// Compute the blur src ptr/stride in pixels.
1399-
uint32_t t_blur_src_stride, *t_blur_src_pixels;
1400+
int32_t t_blur_src_stride;
14001401
t_blur_src_stride = src . stride / 4;
1402+
uint32_t *t_blur_src_pixels;
14011403
t_blur_src_pixels = (uint4 *)src . bits + t_blur_src_stride * (state . blur_rect . y - src . bounds . y) + (state . blur_rect . x - src . bounds . x);
14021404

14031405
// Compute the src ptr/stride in pixels.
1404-
uint32_t t_src_stride, *t_src_pixels;
1406+
int32_t t_src_stride;
14051407
t_src_stride = src . stride / 4;
1408+
uint32_t *t_src_pixels;
14061409
t_src_pixels = (uint4 *)src . bits + t_src_stride * (state . region . y - src . bounds . y) + (state . region . x - src . bounds . x);
14071410

14081411
// Compute the pre-multiplied color.

engine/src/bitmapeffectblur.cpp

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ struct MCBitmapEffectBlur
3636
virtual ~MCBitmapEffectBlur(void) {}
3737

3838
// This method is called by BlurBegin after its setup the common state.
39-
virtual bool Initialize(const MCBitmapEffectBlurParameters& params, const MCRectangle& input_rect, const MCRectangle& output_rect, uint32_t *src_pixels, uint32_t src_stride) = 0;
39+
virtual bool Initialize(const MCBitmapEffectBlurParameters& params, const MCRectangle& input_rect, const MCRectangle& output_rect, uint32_t *src_pixels, int32_t src_stride) = 0;
4040

4141
// This method is called by BlurContinue to produce the next scanline.
4242
virtual void Process(uint8_t *mask) = 0;
@@ -51,7 +51,7 @@ struct MCBitmapEffectBlur
5151
// blur implementations :o)
5252
static bool MCBitmapEffectBlurFactory(MCBitmapEffectFilter type, MCBitmapEffectBlur*& r_blur);
5353

54-
bool MCBitmapEffectBlurBegin(const MCBitmapEffectBlurParameters& p_params, const MCRectangle& p_input_rect, const MCRectangle& p_output_rect, uint32_t *p_src_pixels, uint32_t p_src_stride, MCBitmapEffectBlurRef& r_blur)
54+
bool MCBitmapEffectBlurBegin(const MCBitmapEffectBlurParameters& p_params, const MCRectangle& p_input_rect, const MCRectangle& p_output_rect, uint32_t *p_src_pixels, int32_t p_src_stride, MCBitmapEffectBlurRef& r_blur)
5555
{
5656
MCBitmapEffectBlur *t_blur;
5757
if (!MCBitmapEffectBlurFactory(p_params.filter, t_blur))
@@ -94,7 +94,7 @@ struct MCBitmapEffectGaussianBlurState
9494
uint32_t *kernel;
9595

9696
uint32_t *pixels;
97-
uint32_t stride;
97+
int32_t stride;
9898

9999
int32_t width;
100100
int32_t height;
@@ -106,7 +106,7 @@ struct MCBitmapEffectGaussianBlurState
106106

107107
struct MCBitmapEffectGaussianBlur: public MCBitmapEffectBlur
108108
{
109-
bool Initialize(const MCBitmapEffectBlurParameters& params, const MCRectangle& input_rect, const MCRectangle& output_rect, uint32_t *src_pixels, uint32_t src_stride);
109+
bool Initialize(const MCBitmapEffectBlurParameters& params, const MCRectangle& input_rect, const MCRectangle& output_rect, uint32_t *src_pixels, int32_t src_stride);
110110
void Process(uint8_t *mask);
111111
void Finalize(void);
112112

@@ -177,7 +177,7 @@ static uint32_t *MCBitmapEffectComputeBlurKernel(uint4 r)
177177
return ik;
178178
}
179179

180-
bool MCBitmapEffectGaussianBlur::Initialize(const MCBitmapEffectBlurParameters& params, const MCRectangle& input_rect, const MCRectangle& output_rect, uint32_t *src_pixels, uint32_t src_stride)
180+
bool MCBitmapEffectGaussianBlur::Initialize(const MCBitmapEffectBlurParameters& params, const MCRectangle& input_rect, const MCRectangle& output_rect, uint32_t *src_pixels, int32_t src_stride)
181181
{
182182
state . radius = params . radius;
183183
if (params . radius != 0)
@@ -279,15 +279,15 @@ void MCBitmapEffectGaussianBlur::Finalize(void)
279279

280280
struct MCBitmapEffectFastGaussianBlur: public MCBitmapEffectBlur
281281
{
282-
bool Initialize(const MCBitmapEffectBlurParameters& params, const MCRectangle& input_rect, const MCRectangle& output_rect, uint32_t *src_pixels, uint32_t src_stride);
282+
bool Initialize(const MCBitmapEffectBlurParameters& params, const MCRectangle& input_rect, const MCRectangle& output_rect, uint32_t *src_pixels, int32_t src_stride);
283283
void Process(uint8_t *mask);
284284
void Finalize(void);
285285

286286
int32_t radius;
287287
uint32_t *kernel;
288288

289289
uint32_t *pixels;
290-
uint32_t stride;
290+
int32_t stride;
291291

292292
int32_t width;
293293
int32_t height;
@@ -297,12 +297,12 @@ struct MCBitmapEffectFastGaussianBlur: public MCBitmapEffectBlur
297297
int32_t y;
298298

299299
uint32_t *buffer;
300-
uint32_t buffer_stride;
300+
int32_t buffer_stride;
301301
uint32_t buffer_height;
302302
uint32_t buffer_nextrow;
303303
};
304304

305-
bool MCBitmapEffectFastGaussianBlur::Initialize(const MCBitmapEffectBlurParameters& params, const MCRectangle& input_rect, const MCRectangle& output_rect, uint32_t *src_pixels, uint32_t src_stride)
305+
bool MCBitmapEffectFastGaussianBlur::Initialize(const MCBitmapEffectBlurParameters& params, const MCRectangle& input_rect, const MCRectangle& output_rect, uint32_t *src_pixels, int32_t src_stride)
306306
{
307307
radius = params . radius;
308308

@@ -507,7 +507,7 @@ struct MCBitmapEffectBoxBlurPassInfo
507507
int32_t window;
508508

509509
int32_t width;
510-
uint32_t stride;
510+
int32_t stride;
511511
uint32_t height;
512512
uint32_t buffer_height;
513513

@@ -517,7 +517,7 @@ struct MCBitmapEffectBoxBlurPassInfo
517517

518518
struct MCBitmapEffectBoxBlur: public MCBitmapEffectBlur
519519
{
520-
bool Initialize(const MCBitmapEffectBlurParameters& params, const MCRectangle& input_rect, const MCRectangle& output_rect, uint32_t *src_pixels, uint32_t src_stride);
520+
bool Initialize(const MCBitmapEffectBlurParameters& params, const MCRectangle& input_rect, const MCRectangle& output_rect, uint32_t *src_pixels, int32_t src_stride);
521521
void Process(uint8_t *mask);
522522
void Finalize(void);
523523

@@ -540,7 +540,7 @@ struct MCBitmapEffectBoxBlur: public MCBitmapEffectBlur
540540
int32_t top, bottom, left, right;
541541

542542
uint32_t *pixels;
543-
uint32_t stride;
543+
int32_t stride;
544544

545545
MCBitmapEffectBoxBlurPassInfo *pass_info;
546546

@@ -549,7 +549,7 @@ struct MCBitmapEffectBoxBlur: public MCBitmapEffectBlur
549549
uint32_t spread;
550550
};
551551

552-
bool MCBitmapEffectBoxBlur::Initialize(const MCBitmapEffectBlurParameters& params, const MCRectangle& input_rect, const MCRectangle& output_rect, uint32_t *src_pixels, uint32_t src_stride)
552+
bool MCBitmapEffectBoxBlur::Initialize(const MCBitmapEffectBlurParameters& params, const MCRectangle& input_rect, const MCRectangle& output_rect, uint32_t *src_pixels, int32_t src_stride)
553553
{
554554
width = output_rect . width;
555555
height = output_rect . height;

engine/src/bitmapeffectblur.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ struct MCBitmapEffectBlurParameters
5353
// Note that the input pixels are ARGB (32-bit) and it is the alpha channel that
5454
// is being blurred, while only an output mask (8-bit values) is required.
5555
//
56-
bool MCBitmapEffectBlurBegin(const MCBitmapEffectBlurParameters& params, const MCRectangle& input_rect, const MCRectangle& output_rect, uint32_t *src_pixels, uint32_t src_stride, MCBitmapEffectBlurRef& r_blur);
56+
bool MCBitmapEffectBlurBegin(const MCBitmapEffectBlurParameters& params, const MCRectangle& input_rect, const MCRectangle& output_rect, uint32_t *src_pixels, int32_t src_stride, MCBitmapEffectBlurRef& r_blur);
5757

5858
// Continue a blur effect by generating the next output scanline.
5959
//

0 commit comments

Comments
 (0)