micropython / micropython/micropython
Missing argument validation with native subclassing
Nobody has claimed this yet.
- Dominant language
- C
- Stars
- 22.1k
- Forks
- 9k
- Avg merge
- 6d 4h
- Merged PRs (30d)
- 16
Description
Port, board and/or hardware
unix port, coverage build, x86_64 linux
MicroPython version
MicroPython v1.26.0-preview.524.g255d74b5a8 on 2025-08-06; linux [GCC 12.2.0] version
Reproduction
Run the following Python code:
import framebuf
class FB(framebuffer.FrameBuffer): pass
FB.pixel(0,0,0)
Expected behaviour
A TypeError or other appropriate error is raised
Observed behaviour
A segmentation fault.
MicroPython v1.26.0-preview.524.g255d74b5a8 on 2025-08-06; linux [GCC 12.2.0] version
Use Ctrl-D to exit, Ctrl-E for paste mode
>>> import framebuf
>>> class FB(framebuf.FrameBuffer): pass
...
>>> FB.pixel(0,0,0)
Program received signal SIGSEGV, Segmentation fault.
0x0000555555634845 in framebuf_pixel (n_args=3, args_in=0x7fffffffda30)
at ../../extmod/modframebuf.c:376
376 if (0 <= x && x < self->width && 0 <= y && y < self->height) {
(gdb) where
#0 0x0000555555634845 in framebuf_pixel (n_args=3, args_in=0x7fffffffda30)
at ../../extmod/modframebuf.c:376
#1 0x00005555555fdf8d in fun_builtin_var_call (
self_in=0x555555711250 <framebuf_pixel_obj>, n_args=3, n_kw=0, args=0x7fffffffda30)
at ../../py/objfun.c:123
Additional Information
This was found by fuzzing.
Incidentally, when there is NOT a subclass involved, the error is detected:
>>> framebuf.FrameBuffer.pixel(0,0,0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: argument should be a 'FrameBuffer' not a 'int'
Code of Conduct
Yes, I agree
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start in extmod/modframebuf.c at framebuf_pixel, where the traceback shows the segmentation fault. Reproduce the native-subclass call on the unix coverage build and compare it with the direct FrameBuffer call. Done means the subclass case raises a TypeError or another appropriate error instead of crashing.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- c, python
- Domain
- embedded-iot
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Quiet
- Clarity
- Clearly specified
- Newbie friendliness
- 72/100