mirror of
https://github.com/LibreOffice/core.git
synced 2025-07-29 21:00:46 +00:00

...as seen after 528cdd6573
"python3: upgrade to
3.12.11 (master only)" at <https://ci.libreoffice.org/job/lo_ubsan/3595/>,
> Parser/tokenizer.c:376:37: runtime error: pointer index expression with base 0x62500084d120 overflowed to 0xfffffffffffee800
> #0 0xa65ab9 in restore_fstring_buffers /workdir/UnpackedTarball/python3/Parser/tokenizer.c:376:37
> #1 0xa64eda in tok_reserve_buf /workdir/UnpackedTarball/python3/Parser/tokenizer.c:552:5
> #2 0xa68b1e in tok_readline_raw /workdir/UnpackedTarball/python3/Parser/tokenizer.c:1014:10
> #3 0xa60cbc in tok_underflow_file /workdir/UnpackedTarball/python3/Parser/tokenizer.c:1227:10
> #4 0xa548d6 in tok_nextc /workdir/UnpackedTarball/python3/Parser/tokenizer.c:1367:12
> #5 0xa4b4dd in tok_get_normal_mode /workdir/UnpackedTarball/python3/Parser/tokenizer.c:2423:11
> #6 0xa390b7 in tok_get /workdir/UnpackedTarball/python3/Parser/tokenizer.c:2856:12
> #7 0xa38e5c in _PyTokenizer_Get /workdir/UnpackedTarball/python3/Parser/tokenizer.c:2863:16
> #8 0x504d53 in _PyPegen_fill_token /workdir/UnpackedTarball/python3/Parser/pegen.c:298:16
> #9 0x50af1c in _PyPegen_expect_token /workdir/UnpackedTarball/python3/Parser/pegen.c:455:13
> #10 0x55a2d5 in _tmp_7_rule /workdir/UnpackedTarball/python3/Parser/parser.c:25394:25
> #11 0x50acba in _PyPegen_lookahead /workdir/UnpackedTarball/python3/Parser/pegen.c:446:24
> #12 0x5510cc in compound_stmt_rule /workdir/UnpackedTarball/python3/Parser/parser.c:2075:13
> #13 0x54ed4a in statement_rule /workdir/UnpackedTarball/python3/Parser/parser.c:1403:18
> #14 0x54d056 in _loop1_3_rule /workdir/UnpackedTarball/python3/Parser/parser.c:25157:30
> #15 0x54b9b2 in statements_rule /workdir/UnpackedTarball/python3/Parser/parser.c:1360:18
> #16 0x54645a in file_rule /workdir/UnpackedTarball/python3/Parser/parser.c:1162:18
> #17 0x5458e3 in _PyPegen_parse /workdir/UnpackedTarball/python3/Parser/parser.c:41920:18
> #18 0x512537 in _PyPegen_run_parser /workdir/UnpackedTarball/python3/Parser/pegen.c:926:17
> #19 0x513e5d in _PyPegen_run_parser_from_file_pointer /workdir/UnpackedTarball/python3/Parser/pegen.c:998:14
> #20 0xa309e6 in _PyParser_ASTFromFile /workdir/UnpackedTarball/python3/Parser/peg_api.c:26:12
> #21 0x16260ff in pyrun_file /workdir/UnpackedTarball/python3/Python/pythonrun.c:1665:11
> #22 0x16236e6 in _PyRun_SimpleFileObject /workdir/UnpackedTarball/python3/Python/pythonrun.c:459:13
> #23 0x1622618 in _PyRun_AnyFileObject /workdir/UnpackedTarball/python3/Python/pythonrun.c:78:15
> #24 0x175112e in pymain_run_file_obj /workdir/UnpackedTarball/python3/Modules/main.c:361:15
> #25 0x174f8ec in pymain_run_file /workdir/UnpackedTarball/python3/Modules/main.c:380:15
> #26 0x174d6ed in pymain_run_python /workdir/UnpackedTarball/python3/Modules/main.c:634:21
> #27 0x174c140 in Py_RunMain /workdir/UnpackedTarball/python3/Modules/main.c:714:5
> #28 0x1a75e9b in main /workdir/UnpackedTarball/python3/Programs/_bootstrap_python.c:113:12
> #29 0x7f018ebcf7e4 in __libc_start_main (/lib64/libc.so.6+0x3a7e4)
> #30 0x42509d in _start (/workdir/UnpackedTarball/python3/_bootstrap_python+0x42509d)
>
> SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior Parser/tokenizer.c:376:37 in
> make[2]: *** [Makefile:1319: Python/frozen_modules/abc.h] Error 1
> make[2]: Leaving directory '/home/tdf/lode/jenkins/workspace/lo_ubsan/workdir/UnpackedTarball/python3'
> make[1]: *** [/home/tdf/lode/jenkins/workspace/lo_ubsan/external/python3/ExternalProject_python3.mk:85: /home/tdf/lode/jenkins/workspace/lo_ubsan/workdir/ExternalProject/python3/build] Error 1
Looks like the pair of remember_fstring_buffers and restore_fstring_buffers in
workdir/UnpackedTarball/python3/Parser/tokenizer.c temporarily sets pointers to
deliberately odd values
Change-Id: I700fe42cf95f608b42efa3f70c836782eb41e719
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/186649
Reviewed-by: Stephan Bergmann <stephan.bergmann@allotropia.de>
Tested-by: Jenkins
49 lines
1.7 KiB
Plaintext
49 lines
1.7 KiB
Plaintext
--- Modules/posixmodule.c
|
|
+++ Modules/posixmodule.c
|
|
@@ -13998,6 +13998,9 @@
|
|
};
|
|
|
|
static int
|
|
+#if defined __clang__
|
|
+__attribute__((no_sanitize("shift-base"))) // MFD_HUGE_16GB in /usr/include/linux/memfd.h
|
|
+#endif
|
|
all_ins(PyObject *m)
|
|
{
|
|
#ifdef F_OK
|
|
--- Objects/dictobject.c
|
|
+++ Objects/dictobject.c
|
|
@@ -1497,7 +1497,7 @@
|
|
if (unicode) { // combined unicode -> combined unicode
|
|
PyDictUnicodeEntry *newentries = DK_UNICODE_ENTRIES(mp->ma_keys);
|
|
if (oldkeys->dk_nentries == numentries && mp->ma_keys->dk_kind == DICT_KEYS_UNICODE) {
|
|
- memcpy(newentries, oldentries, numentries * sizeof(PyDictUnicodeEntry));
|
|
+ memcpy(newentries, (void *) oldentries, numentries * sizeof(PyDictUnicodeEntry));
|
|
}
|
|
else {
|
|
PyDictUnicodeEntry *ep = oldentries;
|
|
--- Objects/listobject.c
|
|
+++ Objects/listobject.c
|
|
@@ -539,7 +539,7 @@
|
|
dest[i] = Py_NewRef(v);
|
|
}
|
|
src = b->ob_item;
|
|
- dest = np->ob_item + Py_SIZE(a);
|
|
+ dest = Py_SIZE(a) == 0 ? np->ob_item : np->ob_item + Py_SIZE(a);
|
|
for (i = 0; i < Py_SIZE(b); i++) {
|
|
PyObject *v = src[i];
|
|
dest[i] = Py_NewRef(v);
|
|
--- Parser/tokenizer.c
|
|
+++ Parser/tokenizer.c
|
|
@@ -373,9 +373,9 @@
|
|
|
|
for (index = tok->tok_mode_stack_index; index >= 0; --index) {
|
|
mode = &(tok->tok_mode_stack[index]);
|
|
- mode->f_string_start = tok->buf + mode->f_string_start_offset;
|
|
+ mode->f_string_start = (char *) (((intptr_t) tok->buf) + mode->f_string_start_offset);
|
|
mode->f_string_multi_line_start =
|
|
- tok->buf + mode->f_string_multi_line_start_offset;
|
|
+ (char *) (((intptr_t) tok->buf) + mode->f_string_multi_line_start_offset);
|
|
}
|
|
}
|
|
|