# Crash report ### What happened? A reproducer (in the format of `Lib/tests/test_free_threading/xxx.py`): ```python import unittest from test.support import threading_helper threading_helper.requires_working_threading(module=True) class ItertoolsThreading(unittest.TestCase): @threading_helper.reap_threads def test_maketrans(self): number_of_iterations = 10 number_of_attempts=100 for _ in range(number_of_iterations): print(f'iteration {_}') d = {2000: 'a'} def work_iterator(dct): for idx in range(number_of_attempts): str.maketrans(dct) idx = 2000 + idx # outside range of small ints dct[idx] = chr(idx%16) dct.pop(idx, None) threading_helper.run_concurrently(work_iterator, nthreads=10, args=[d]) if __name__ == "__main__": unittest.main() print('done') ``` At first glance it seems that the iteration using `PyDict_Next` is not safe (but maybe there are more unsafe parts): https://github.com/python/cpython/blob/24cc998c164f137603f1c6d95b929d640211d237/Objects/unicodeobject.c#L13158 (found when reviewing #145129) ### CPython versions tested on: CPython main branch ### Operating systems tested on: Windows ### Output from running 'python -VV' on the command line: _No response_ <!-- gh-linked-prs --> ### Linked PRs * gh-145157 * gh-145320 <!-- /gh-linked-prs -->