Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork8.2k
Description
Port, board and/or hardware
unix, RP2
MicroPython version
MicroPython v1.23.0 on 2024-06-02; Raspberry Pi Pico with RP2040
MicroPython v1.23.0 on 2024-05-31; darwin [GCC 4.2.1] version
Reproduction
In an interactive session (or otherwise), run the following code:
import framebufbuf = bytearray(10*10*2)f = framebuf.FrameBuffer(buf, 10, 10, framebuf.RGB565)f.ellipse(5, 5, 0, 0, 0xffff, True)
Expected behaviour
Nothing should be drawn. Code should complete normally.
Maybe an exception should be raised, but I think it's OK to just draw nothing.
Observed behaviour
Micropython hangs; 100% CPU usage observed in unix port. Strong suspicion this is an infinite loop.
Additional Information
I'm very suspicious of the following code:
micropython/extmod/modframebuf.c
Lines 542 to 554 in1b89c50
while (stoppingx >=stoppingy) {// 1st set of points, y' > -1 | |
draw_ellipse_points(self,args[0],args[1],x,y,args[4],mask); | |
y+=1; | |
stoppingy+=two_asquare; | |
ellipse_error+=ychange; | |
ychange+=two_asquare; | |
if ((2*ellipse_error+xchange)>0) { | |
x-=1; | |
stoppingx-=two_bsquare; | |
ellipse_error+=xchange; | |
xchange+=two_bsquare; | |
} | |
} |
In this casetwo_asquare
andtwo_bsquare
are both 0, so thestoppingx
andstoppingy
look like they are never changed, but I haven't 100% proven it to myself.
Code of Conduct
Yes, I agree