I'm Shamil Abdulaev, a backend and systems engineer. I contribute to CPython, glibc and the Python typing ecosystem, mostly memory-safety and concurrency fixes found with sanitizers.
Each project below expands into the full list of my pull requests and issues. ✅ merged or resolved · 🟡 open. Pull requests closed without landing are left out. Updated daily by a workflow. Same list on ashm-dev.github.io.
python/cpython — 33 merged PRs · 45 issues
- 🟡 #158315 gh-158304: Avoid creating StopIteration for every value yielded by an async generator
- ✅ #157412 gh-157378: Fix SyntaxError.offset for "Non-UTF-8 code" error
- 🟡 #157370 gh-157364: Fix use-after-free in TextIOWrapper during reentrant detach
- 🟡 #157179 gh-157176: Fix GC tracking in PyStructSequence_New
- ✅ #156769 gh-156762: Fix tp_clear slot signature for operator.methodcaller
- ✅ #156403 gh-156402: Modernize annotation usage in libregrtest
- ✅ #156300 gh-156114: Fix crash in perf trampoline with unencodable code names
- ✅ #156130 gh-155911: Fix curses detection with libraries in LIBS
- ✅ #150079 [3.13] gh-142831: Fix use-after-free in json encoder during re-entrant mutation (gh-142851)
- ✅ #150078 [3.14] gh-142831: Fix use-after-free in json encoder during re-entrant mutation (gh-142851)
- ✅ #148833 gh-148832: Use
-icf=0in BOLT_APPLY_FLAGS - ✅ #148702 gh-148701: Add missing test coverage for asyncio.graph
- ✅ #148595 gh-146553: Fix infinite loop in typing.get_type_hints() on circular __wrapped__
- ✅ #146201 gh-146196: Fix potential Undefined Behavior in _PyUnicodeWriter_WriteASCIIString
- ✅ #145840 gh-144712: Export _Py_jit_entry symbol via PyAPI_DATA
- ✅ #144987 gh-144986: Fix memory leak in atexit.register()
- ✅ #143097 Fix UBSan error in _testcapi: correct create_attr_from_spec signature
- ✅ #142851 gh-142831: Fix UAF in
_jsonmodule - ✅ #142492 gh-142476: fix memory leak when creating JIT executors
- ✅ #141554 gh-141553: Fix incorrect function signatures in
_testmultiphase - ✅ #141529 gh-42400: Fix buffer overflow in _Py_wrealpath for long paths
- ✅ #140910 gh-140594: Fix an out of bounds read when feeding NUL byte to
PyOS_StdioReadline - ✅ #140909 gh-140260: Fix data race in _struct module initialization with subinterpreters
- ✅ #140684 [3.13] gh-140301: Fix memory leak in subinterpreter PyConfig cleanup (GH-140303)
- ✅ #140637 Remove dead stores to 'size' in UTF-8 decoder (unicodeobject.c)
- ✅ #140585 Remove unreachable break statements in _ctypes_test.c
- ✅ #140400 gh-140398: Fix memory leaks in readline module when PySys_Audit fails
- ✅ #140397 [3.13] gh-140306: Fix memory leaks in cross-interpreter data handling
- ✅ #140307 gh-140306: Fix memory leaks in cross-interpreter data handling
- ✅ #140303 gh-140301: Fix memory leak in subinterpreter PyConfig cleanup
- ✅ #140274 gh-140272: Fix memory leak in _gdbm.gdbm.clear()
- ✅ #140265 gh-140257: fix data race on eval_breaker during finalization
- ✅ #140111 gh-140067: Fix memory leak in sub-interpreter creation
- ✅ #139271 gh-139269: Fix unaligned memory access in JIT code patching functions
- ✅ #138667 gh-138665: Move
platform.invalidate_cachesdocs - ✅ #134750 gh-134664: Document cleanup_socket parameter in asyncio.start_unix_server()
- 🟡 #158795 Compiler warning:
instruction_funcptr_tracing_tabledefined but not used with--with-tail-call-interp - 🟡 #158304 Async generators create and discard a StopIteration exception for every yielded value
- 🟡 #158126 pickle.dumps() creates and discards an AttributeError on every call since 3.13.1
- 🟡 #158090 Hang at shutdown: take_gil() clears the GIL drop request after releasing gil->mutex
- 🟡 #158086 JIT: test_unittest fails with -X lazy_imports=all: unittest.main is a module
- 🟡 #157379
_csv.reader: NULL deref via re-entrant iterator that reaches EOF with an open quoted field - ✅ #157378 Wrong
SyntaxError.offsetfor "Non-UTF-8 code starting with ..." when a non-ASCII character precedes the invalid byte - 🟡 #157176 Memory leak on interpreter shutdown when reference cycle exists between
structseqtype and its instance - 🟡 #157062 Segfault during BOLT profile collection in
test_functools(fib) when building with--enable-bolt --enable-optimizations - ✅ #156762
_operator:methodcaller_clearhas the wrong signature for thetp_clearslot (returnsvoid, notint) - 🟡 #156570 test.support.warnings_helper.check_warnings() raises KeyError: 'warnings' under -X lazy_imports=all
- 🟡 #156402 Modernize annotation usage in libregrtest
- ✅ #151039 Crash: NULL deref in _datetime when a static type outlives its module
- ✅ #148832 Build: BOLT
-icf=1breaks type-slot function-pointer identity, causes SIGSEGV - ✅ #148775 c-analyzer: bump MAX_SIZES for Modules/clinic/_testclinic.c.h
- ✅ #148701 Add missing test coverage for asyncio.graph
- ✅ #148443 Recursive _testcapi.pyobject_vectorcall() aborts with fatal stack overflow instead of raising RecursionError in a small-stack thread
- ✅ #146429 Uninitialized variable replace usage in charmapencode_output (Objects/unicodeobject.c) discovered by scan-build
- ✅ #146196 Undefined Behavior in _PyUnicodeWriter_WriteASCIIString: NULL pointer passed to memcpy when len is 0
- ✅ #145953 Segmentation fault in
test_call.py(c_recurse) on Linux with Clang (LTO+PGO) - ✅ #144986 Memory leak in
atexit.register(): missingPy_DECREFforfunc_argstuple - ✅ #142985 Build failure with
--enable-experimental-jitand ASan: Memory leak inallocate_executorduring module freezing - ✅ #142543 SIGSEGV in test_isinstance and test_json with --enable-experimental-jit=yes and --with-lto=full
- ✅ #142476 ASan memory leak in test_gc with --enable-experimental-jit (allocate_executor)
- 🟡 #141621 UBSan SEGV in
_Py_LazyJitTrampolinewhen building with Clang and--with-undefined-behavior-sanitizer+ experimental JIT - ✅ #141553 Fix incorrect function signatures in _testmultiphase (UBSan)
- ✅ #140431 Segfault in gc_free_threading.c after PR #140262 with ASAN build and free-threading tests
- 🟡 #140404 LeakSanitizer detects memory leaks in test_import with _testsinglephase module in subinterpreter
- ✅ #140398 Memory leaks in readline module when PySys_Audit fails
- ✅ #140332 MemorySanitizer: use-of-uninitialized-value in _ssl.txt2obj via OpenSSL's OBJ_txt2obj
- ✅ #140306 Memory leak in test__interpchannels: _PyXIData_New not freed in channel_send
- ✅ #140301 Memory leak in test_capi with subinterpreter creation
- ✅ #140272 Memory leak in _gdbm.gdbm.clear() method: missing free() for gdbm_firstkey() result
- ✅ #140267 ThreadSanitizer reports thread leak in multiprocessing.Manager accepter thread
- ✅ #140260 ThreadSanitizer: data race in _struct module initialization with InterpreterPoolExecutor (free-threading build)
- ✅ #140257 ThreadSanitizer: data race in interpreter_clear() vs take_gil() during finalization with daemon threads
- 🟡 #140209 TSAN reports multiple data races, SEGV errors, and thread leaks when running the full test suite
- ✅ #140159 Build Failure in posixmodule.c with Clang, ThreadSanitizer, and free-threaded build enabled
- ✅ #140120 Memory leak in
hmacmodule with HACL* backend detected by AddressSanitizer - ✅ #140067 Memory leak in test_sys with subinterpreters creation (AddressSanitizer detection)
- 🟡 #139834 JIT: Segfault in _Py_LazyJitTrampoline with ASan/UBSan enabled
- ✅ #139393
test_capi.test_opt.test_call_len_known_lengthfails on JIT+debug builds - ✅ #139288 JIT: Segmentation fault in _Py_LazyJitTrampoline when running test_asyncio after gh-139269 fix
- ✅ #139269 JIT: UB: unaligned store in
patch_*functions - ✅ #127685 Performance Overhead in Ternary Operator Due to Value Loading vs Constant Loading
python/typeshed — 10 merged PRs · 0 issues
- ✅ #16438 [untangle] Update to 1.3.*
- ✅ #16426 [PyMySQL] Update to 1.2.3
- ✅ #14802 fix(types): cr_frame may be None
- ✅ #14770 cachetools: precise typing for decorators and cached(); expose cache_info/cache_clear and fix keys signatures
- ✅ #14153 Remove corus stubs
- ✅ #14142 Remove caldav stubs
- ✅ #14141 Remove pygit2 stubs
- ✅ #13493 remove pyOpenSSL stubs
- ✅ #12596 Improve type annotations in Flask-Cors stubs
- ✅ #12585 Add missing constants to flask-cors stubs
sqlalchemy/sqlalchemy — 10 merged PRs · 7 issues
- ✅ #13261 Add sqlite.JSONB type for binary JSON storage (SQLite >= 3.45.0)
- ✅ #13244 Remove unused TypeVars and compat import from typing modules
- ✅ #13239 Add mypy ignore comments for Python 3.14 module imports
- ✅ #12989 Fix parameter mutation in orm_pre_session_exec()
- ✅ #12988 Fix type hint for with_for_update() to support tuples of table classes
- ✅ #12568 Remove unused typing imports
- ✅ #12539 refactor(testing-and-utils): Remove unused code and fix style issues
- ✅ #12538 refactor (sql): simplify and optimize internal SQL handling
- ✅ #12535 refactor: clean up unused variables in engine module
- ✅ #12534 refactor: simplify and clean up dialect-specific code
- ✅ #13644 postgresql.DOMAIN.copy() and to_metadata() drop CHECK, NOT NULL, DEFAULT, constraint_name, and collation
- ✅ #13643 MutableDict |= and MutableList *= do not emit change events; changes are not persisted
- ✅ #13642 str(select(func.aggregate_strings(...))) raises TypeError in default SQLCompiler (regression in 2.1)
- ✅ #13641 AttributeError when resetting logging_token or connecting with logging_token=None
- ✅ #13617 TypeDecorator.comparator_factory creates a new class with type() on every access
- 🟡 #13281 Modernize type annotations to PEP 604 union syntax
- ✅ #13240 mypy errors on Python 3.14 version-gated imports in compat.py
open-webui/open-webui — 8 merged PRs · 6 issues
- ✅ #24118 style(env): satisfy ruff lint on backend/open_webui/env.py
- ✅ #22987 refactor: modernize typing
- ✅ #22766 chore: align black with Ruff backend formatting
- ✅ #22594 refactor: modernize type hints and imports in access_control module
- ✅ #22576 feat: add ruff linter & formatter
- ✅ #22265 feat: add OpenTelemetry system metrics instrumentation
- ✅ #21453 i18n: Add missing Russian (ru-RU) translations
- ✅ #8212 feat: Small optimization
- ✅ #23793 feat: cache get_user_by_id — 25% of all DB queries with zero caching
- ✅ #21955 bug: Duplicate images displayed when model with thinking/reasoning generates an image (e.g., Gemini 3 Pro Image Preview)
- ✅ #21641 feat: Add Ruff linter & formatter for Python code quality
- ✅ #21411 bug: File descriptor leak in audio.py and pipelines.py — open() without close
- ✅ #21410 bug: Memory leak in SESSION_POOL, USAGE_POOL and YdocManager (with and without Redis)
- ✅ #9491 Proxy Configuration via Environment Variables and Global Request Sessions
glibc (sourceware) — 8 committed patches · 8 bugs
Patches
- 🟡 patch 145006 [v3] libio: Use __wunderflow in _IO_getwline_info
- 🟡 patch 144254 [v2] libio: Use __wunderflow in _IO_getwline_info
- 🟡 patch 143415 [v2] termios: Add tcgetwinsize and tcsetwinsize [BZ #32074]
- ✅ patch 143055 elf: Do not load cache extensions from an old-format ld.so.cache [BZ #34600]
- ✅ patch 142924 [v2] math: Set errno to ERANGE for logb (+-0) [BZ #6793]
- ✅ patch 142808 [v2] libio: Add test for fopen with an empty ", ccs=" value [BZ #34574]
- ✅ patch 142193 stdlib, wcsmbs: Add missing __nonnull to strto*/wcsto* [BZ #33053]
- ✅ patch 134886 [v3] libio: Fix race in _IO_new_file_init_internal initialization order [BZ #33785]
- ✅ patch 134231 hugepages: close fd on error path in __get_thp_mode
- ✅ patch 133861 [v2] manual: clarify _FILE_OFFSET_BITS Y2038 implications [BZ #34095]
- ✅ patch 133858 README: fix stale bug-reporting URL [BZ #34094]
Bugs
- 🟡 BZ #34613 sem_open with O_CREAT|O_EXCL returns uninitialized pointer if write fails
- 🟡 BZ #34612 localedef: charmap ..(2).. ellipsis incorrectly treated as decimal range
- ✅ BZ #34611 wcsftime ignores '#' and '^' flags for %Z (regression introduced in 79b2667d1e)
- ✅ BZ #34610 fts_open: invalid free on NULL parent with empty argv on allocation failure
- 🟡 BZ #34609 authdes_pk_create: free() called on uninitialized pointer on memory allocation failure
- 🟡 BZ #34608 wordexp: heap buffer overflow (write of size 1 to malloc(0)) expanding
$* or $ @ with no positional arguments - 🟡 BZ #34607 localedef crashes with SIGSEGV in handle_ellipsis when LC_COLLATE contains only an ellipsis
- ✅ BZ #34600 [2.44 regression] ld.so segfaults at startup with an old-format ld.so.cache
streamlit/streamlit — 4 merged PRs · 0 issues
typeddjango/django-stubs — 3 merged PRs · 0 issues
ag2ai/ag2 — 1 merged PRs · 1 issues
- ✅ #2111 fix(io): make console input non-blocking in async processor
- ✅ #2110 [Bug]: Blocking I/O in AsyncConsoleEventProcessor halts the event loop
elastic/elasticsearch — 1 merged PRs · 0 issues
- ✅ #117235 Deprecate ChunkingOptions parameter
celery/celery — 1 merged PRs · 0 issues
- ✅ #9173 Add check for soft_time_limit and time_limit values
anthropics/claude-code — 0 merged PRs · 1 issues
- 🟡 #96014 [Feature Request] Reduce false positive rate in safety guardrails for benign code review requests
c3lang/c3c — 0 merged PRs · 1 issues
- ✅ #3155 Add monadic operations (
map,bind,or_else) tostd::collections::maybe
llvm/llvm-project — 0 merged PRs · 1 issues
- 🟡 #163263 [BOLT] llvm-bolt segmentation fault during Python optimization with -frame-opt=hot after allocation combiner pass
pgadmin-org/pgadmin4 — 0 merged PRs · 1 issues
- ✅ #8500 Upgrade Dependencies and Base Systems to Latest Versions
litestar-org/litestar — 0 merged PRs · 1 issues
- ✅ #3848 Bug: Missing WebSocket Connection State Validation on Close and Message Send Operations



