commit 0308e1f010cd8650840fa0ceee3b342229982420 from: Xiao-Yong via: Russ Cox date: Fri Apr 05 18:44:47 2019 UTC devdraw: fix cocoa metal _flushmemscreen for invalid rectangles (#240) It is possible to receive multiple screen resize events, and resizeimg would be called for different sizes, before _flushmemscreen actually gets called with rectangle sizes different from the most recent resizeimg call. The size mismatch would trigger illegal memory access inside _flushmemscreen. This commit protects _flushmemscreen by returning early if the requested rectangle is outside of the current texture rectangle. commit - 4d3c36cce4d70dfd88bd5e782e86141775577d30 commit + 0308e1f010cd8650840fa0ceee3b342229982420 blob - 21123f16323dd43bbb1c6629b598265ff2691e56 blob + 78110302b1f40714d758eeaa023d4a5012fe01e0 --- src/cmd/devdraw/cocoa-screen-metal.m +++ src/cmd/devdraw/cocoa-screen-metal.m @@ -987,6 +987,10 @@ void _flushmemscreen(Rectangle r) { LOG(@"_flushmemscreen(%d,%d,%d,%d)", r.min.x, r.min.y, Dx(r), Dy(r)); + if(!rectinrect(r, Rect(0, 0, texture.width, texture.height))){ + LOG(@"Rectangle is out of bounds, return."); + return; + } @autoreleasepool{ [texture