I help maintain the Arrow package, and we noticed a recent sanitizer error in one of our tests that ultimately touches stringi code. The change seems to come from changing from GCC14 to GCC15 in our runner image (rhub's gcc-asan) which seems to cause the stringi package to end up using the bundled ICU instead of the system ICU.
From a passing build:
2026-03-16T00:58:23.5447310Z #22 9.255 using C compiler: ‘gcc (GCC) 14.2.1 20240912 (Red Hat 14.2.1-3)’
...
2026-03-16T01:05:37.6254947Z #22 443.5 * installing *source* package ‘stringi’ ...
2026-03-16T01:05:37.6256062Z #22 443.5 ** this is package ‘stringi’ version ‘1.8.7’
...
2026-03-16T01:05:37.6274753Z #22 443.5 checking for ICU4C >= 61... yes
2026-03-16T01:05:37.6275427Z #22 443.5 checking for additional CPPFLAGS, LDFLAGS, and LIBS required... done
2026-03-16T01:05:37.6276275Z #22 443.5 checking whether an ICU4C-based project can be built... yes
From a failing build:
2026-03-17T00:50:13.9376643Z #22 9.577 using C compiler: ‘gcc (GCC) 15.2.1 20260123 (Red Hat 15.2.1-7)’
...
2026-03-17T01:09:07.9140468Z #22 1143.6 * installing *source* package ‘stringi’ ...
2026-03-17T01:09:07.9143380Z #22 1143.6 ** this is package ‘stringi’ version ‘1.8.7’
...
2026-03-17T01:09:07.9191759Z #22 1143.6 checking for ICU4C >= 61... yes
2026-03-17T01:09:07.9192400Z #22 1143.6 checking for additional CPPFLAGS, LDFLAGS, and LIBS required... done
2026-03-17T01:09:07.9193205Z #22 1143.6 checking whether an ICU4C-based project can be built... no
2026-03-17T01:09:07.9193865Z #22 1143.6 *** This version of ICU4C cannot be used.
2026-03-17T01:09:07.9194479Z #22 1143.6 *** Using the ICU 74 bundle that comes with 'stringi'.
This change then causes the following sanitizer error (which appears all in stringi / ICU code):
2026-03-17T02:20:48.1167970Z Start test: transmute() defuses dots arguments (ARROW-13262)
2026-03-17T02:20:48.1168384Z icu74/common/rbbi.cpp:874:32: runtime error: index 6 out of bounds for type 'unsigned char [1]'
2026-03-17T02:20:48.1169218Z #0 0x7b7e86085a99 in handleNext<icu_74_stringi::RBBIStateTableRowT<unsigned char>, icu_74_stringi::TrieFunc8> icu74/common/rbbi.cpp:874
2026-03-17T02:20:48.1169691Z #1 0x7b7e86085a99 in icu_74_stringi::RuleBasedBreakIterator::handleNext() icu74/common/rbbi.cpp:741
2026-03-17T02:20:48.1170289Z #2 0x7b7e86061052 in icu_74_stringi::RuleBasedBreakIterator::BreakCache::populateFollowing() icu74/common/rbbi_cache.cpp:484
2026-03-17T02:20:48.1170860Z #3 0x7b7e86062852 in icu_74_stringi::RuleBasedBreakIterator::BreakCache::nextOL() icu74/common/rbbi_cache.cpp:277
2026-03-17T02:20:48.1171270Z #4 0x7b7e860775b4 in icu_74_stringi::RuleBasedBreakIterator::next() icu74/common/rbbi.cpp:594
2026-03-17T02:20:48.1172056Z #5 0x7b7e85b246fd in StriRuleBasedBreakIterator::next(std::pair<int, int>&) /tmp/RtmpTKy6zy/R.INSTALL167537409b7f/stringi/src/stri_brkiter.cpp:353
2026-03-17T02:20:48.1173055Z #6 0x7b7e85c735b2 in stri_split_boundaries(SEXPREC*, SEXPREC*, SEXPREC*, SEXPREC*, SEXPREC*) /tmp/RtmpTKy6zy/R.INSTALL167537409b7f/stringi/src/stri_search_boundaries_split.cpp:117
2026-03-17T02:20:48.1173336Z #7 0x7f7f2943b06d in R_doDotCall /tmp/R-devel/src/main/dotcode.c:766
2026-03-17T02:20:48.1173602Z #8 0x7f7f2948202b in bcEval_loop /tmp/R-devel/src/main/eval.c:8682
2026-03-17T02:20:48.1173860Z #9 0x7f7f2948959a in bcEval /tmp/R-devel/src/main/eval.c:7515
2026-03-17T02:20:48.1174113Z #10 0x7f7f2948959a in bcEval /tmp/R-devel/src/main/eval.c:7500
2026-03-17T02:20:48.1174377Z #11 0x7f7f2948995a in Rf_eval /tmp/R-devel/src/main/eval.c:1167
2026-03-17T02:20:48.1174680Z #12 0x7f7f2948b95e in R_execClosure /tmp/R-devel/src/main/eval.c:2389
2026-03-17T02:20:48.1174992Z #13 0x7f7f2948c727 in applyClosure_core /tmp/R-devel/src/main/eval.c:2302
2026-03-17T02:20:48.1175283Z #14 0x7f7f2948f153 in Rf_applyClosure /tmp/R-devel/src/main/eval.c:2324
2026-03-17T02:20:48.1175576Z #15 0x7f7f2948f153 in R_forceAndCall /tmp/R-devel/src/main/eval.c:2456
2026-03-17T02:20:48.1175951Z #16 0x7f7f293b87f2 in do_vapply /tmp/R-devel/src/main/apply.c:173
2026-03-17T02:20:48.1176240Z #17 0x7f7f294d5d02 in do_internal /tmp/R-devel/src/main/names.c:1419
2026-03-17T02:20:48.1176530Z #18 0x7f7f2947db1b in bcEval_loop /tmp/R-devel/src/main/eval.c:8152
2026-03-17T02:20:48.1176777Z #19 0x7f7f2948959a in bcEval /tmp/R-devel/src/main/eval.c:7515
2026-03-17T02:20:48.1177014Z #20 0x7f7f2948959a in bcEval /tmp/R-devel/src/main/eval.c:7500
2026-03-17T02:20:48.1177352Z #21 0x7f7f2948995a in Rf_eval /tmp/R-devel/src/main/eval.c:1167
2026-03-17T02:20:48.1177713Z #22 0x7f7f2948b95e in R_execClosure /tmp/R-devel/src/main/eval.c:2389
2026-03-17T02:20:48.1177960Z #23 0x7f7f2948c727 in applyClosure_core /tmp/R-devel/src/main/eval.c:2302
2026-03-17T02:20:48.1178147Z #24 0x7f7f29489aac in Rf_applyClosure /tmp/R-devel/src/main/eval.c:2324
2026-03-17T02:20:48.1178307Z #25 0x7f7f29489aac in Rf_eval /tmp/R-devel/src/main/eval.c:1280
2026-03-17T02:20:48.1178418Z #26 0x7b7efa7531ea in r_eval rlang/eval.h:12
2026-03-17T02:20:48.1178583Z #27 0x7b7efa7531ea in rlang_eval_tidy internal/eval-tidy.c:542
2026-03-17T02:20:48.1179204Z #28 0x7b7eab2ab532 in dplyr_mask_eval_all_mutate(SEXPREC*, SEXPREC*) /tmp/Rtmpi88oX9/R.INSTALL29a3253e3dae/dplyr/src/mutate.cpp:36
2026-03-17T02:20:48.1179384Z #29 0x7f7f2943b0c9 in R_doDotCall /tmp/R-devel/src/main/dotcode.c:757
2026-03-17T02:20:48.1179563Z #30 0x7f7f2943b616 in do_dotcall /tmp/R-devel/src/main/dotcode.c:1437
2026-03-17T02:20:48.1179717Z #31 0x7f7f29489fd0 in Rf_eval /tmp/R-devel/src/main/eval.c:1260
2026-03-17T02:20:48.1179902Z #32 0x7f7f2948b95e in R_execClosure /tmp/R-devel/src/main/eval.c:2389
2026-03-17T02:20:48.1180087Z #33 0x7f7f2948c727 in applyClosure_core /tmp/R-devel/src/main/eval.c:2302
2026-03-17T02:20:48.1180275Z #34 0x7f7f29489aac in Rf_applyClosure /tmp/R-devel/src/main/eval.c:2324
2026-03-17T02:20:48.1180430Z #35 0x7f7f29489aac in Rf_eval /tmp/R-devel/src/main/eval.c:1280
2026-03-17T02:20:48.1180593Z #36 0x7f7f2948d4f4 in do_begin /tmp/R-devel/src/main/eval.c:2992
2026-03-17T02:20:48.1180749Z #37 0x7f7f29489d5f in Rf_eval /tmp/R-devel/src/main/eval.c:1232
2026-03-17T02:20:48.1180920Z #38 0x7f7f2948b95e in R_execClosure /tmp/R-devel/src/main/eval.c:2389
2026-03-17T02:20:48.1181107Z #39 0x7f7f2948c727 in applyClosure_core /tmp/R-devel/src/main/eval.c:2302
2026-03-17T02:20:48.1181284Z #40 0x7f7f2947de43 in Rf_applyClosure /tmp/R-devel/src/main/eval.c:2324
2026-03-17T02:20:48.1181460Z #41 0x7f7f2947de43 in bcEval_loop /tmp/R-devel/src/main/eval.c:8103
2026-03-17T02:20:48.1181673Z #42 0x7f7f2948959a in bcEval /tmp/R-devel/src/main/eval.c:7515
2026-03-17T02:20:48.1181941Z #43 0x7f7f2948959a in bcEval /tmp/R-devel/src/main/eval.c:7500
2026-03-17T02:20:48.1182364Z #44 0x7f7f2948995a in Rf_eval /tmp/R-devel/src/main/eval.c:1167
2026-03-17T02:20:48.1182672Z #45 0x7f7f2948b95e in R_execClosure /tmp/R-devel/src/main/eval.c:2389
2026-03-17T02:20:48.1183002Z #46 0x7f7f2948c727 in applyClosure_core /tmp/R-devel/src/main/eval.c:2302
2026-03-17T02:20:48.1183202Z #47 0x7f7f2948d168 in Rf_applyClosure /tmp/R-devel/src/main/eval.c:2324
2026-03-17T02:20:48.1183389Z #48 0x7f7f294d8233 in dispatchMethod /tmp/R-devel/src/main/objects.c:473
2026-03-17T02:20:48.1183563Z #49 0x7f7f294d8766 in Rf_usemethod /tmp/R-devel/src/main/objects.c:509
2026-03-17T02:20:48.1183739Z #50 0x7f7f294d8b2b in do_usemethod /tmp/R-devel/src/main/objects.c:579
2026-03-17T02:20:48.1183909Z #51 0x7f7f2947db1b in bcEval_loop /tmp/R-devel/src/main/eval.c:8152
2026-03-17T02:20:48.1184069Z #52 0x7f7f2948959a in bcEval /tmp/R-devel/src/main/eval.c:7515
2026-03-17T02:20:48.1184213Z #53 0x7f7f2948959a in bcEval /tmp/R-devel/src/main/eval.c:7500
2026-03-17T02:20:48.1184373Z #54 0x7f7f2948995a in Rf_eval /tmp/R-devel/src/main/eval.c:1167
2026-03-17T02:20:48.1184543Z #55 0x7f7f2948b95e in R_execClosure /tmp/R-devel/src/main/eval.c:2389
2026-03-17T02:20:48.1184803Z #56 0x7f7f2948c727 in applyClosure_core /tmp/R-devel/src/main/eval.c:2302
2026-03-17T02:20:48.1184986Z #57 0x7f7f29489aac in Rf_applyClosure /tmp/R-devel/src/main/eval.c:2324
2026-03-17T02:20:48.1185136Z #58 0x7f7f29489aac in Rf_eval /tmp/R-devel/src/main/eval.c:1280
2026-03-17T02:20:48.1185287Z #59 0x7f7f2949004e in do_eval /tmp/R-devel/src/main/eval.c:3955
2026-03-17T02:20:48.1185451Z #60 0x7f7f2947dd48 in bcEval_loop /tmp/R-devel/src/main/eval.c:8132
2026-03-17T02:20:48.1185655Z #61 0x7f7f2948959a in bcEval /tmp/R-devel/src/main/eval.c:7515
2026-03-17T02:20:48.1185858Z #62 0x7f7f2948959a in bcEval /tmp/R-devel/src/main/eval.c:7500
2026-03-17T02:20:48.1186016Z #63 0x7f7f2948995a in Rf_eval /tmp/R-devel/src/main/eval.c:1167
2026-03-17T02:20:48.1186184Z #64 0x7f7f2948b95e in R_execClosure /tmp/R-devel/src/main/eval.c:2389
2026-03-17T02:20:48.1186367Z #65 0x7f7f2948c727 in applyClosure_core /tmp/R-devel/src/main/eval.c:2302
2026-03-17T02:20:48.1186550Z #66 0x7f7f2948d168 in Rf_applyClosure /tmp/R-devel/src/main/eval.c:2324
2026-03-17T02:20:48.1186727Z #67 0x7f7f294d8233 in dispatchMethod /tmp/R-devel/src/main/objects.c:473
2026-03-17T02:20:48.1186903Z #68 0x7f7f294d88e0 in Rf_usemethod /tmp/R-devel/src/main/objects.c:513
2026-03-17T02:20:48.1187074Z #69 0x7f7f294d8b2b in do_usemethod /tmp/R-devel/src/main/objects.c:579
2026-03-17T02:20:48.1187254Z #70 0x7f7f2947db1b in bcEval_loop /tmp/R-devel/src/main/eval.c:8152
2026-03-17T02:20:48.1187401Z #71 0x7f7f2948959a in bcEval /tmp/R-devel/src/main/eval.c:7515
2026-03-17T02:20:48.1187551Z #72 0x7f7f2948959a in bcEval /tmp/R-devel/src/main/eval.c:7500
2026-03-17T02:20:48.1187696Z #73 0x7f7f2948995a in Rf_eval /tmp/R-devel/src/main/eval.c:1167
2026-03-17T02:20:48.1187863Z #74 0x7f7f2948b95e in R_execClosure /tmp/R-devel/src/main/eval.c:2389
2026-03-17T02:20:48.1188049Z #75 0x7f7f2948c727 in applyClosure_core /tmp/R-devel/src/main/eval.c:2302
2026-03-17T02:20:48.1188224Z #76 0x7f7f2948d168 in Rf_applyClosure /tmp/R-devel/src/main/eval.c:2324
2026-03-17T02:20:48.1188409Z #77 0x7f7f294d8233 in dispatchMethod /tmp/R-devel/src/main/objects.c:473
2026-03-17T02:20:48.1188577Z #78 0x7f7f294d8766 in Rf_usemethod /tmp/R-devel/src/main/objects.c:509
2026-03-17T02:20:48.1188750Z #79 0x7f7f294d8b2b in do_usemethod /tmp/R-devel/src/main/objects.c:579
2026-03-17T02:20:48.1189130Z #80 0x7f7f2947db1b in bcEval_loop /tmp/R-devel/src/main/eval.c:8152
2026-03-17T02:20:48.1189285Z #81 0x7f7f2948959a in bcEval /tmp/R-devel/src/main/eval.c:7515
2026-03-17T02:20:48.1189436Z #82 0x7f7f2948959a in bcEval /tmp/R-devel/src/main/eval.c:7500
2026-03-17T02:20:48.1189582Z #83 0x7f7f2948995a in Rf_eval /tmp/R-devel/src/main/eval.c:1167
2026-03-17T02:20:48.1189753Z #84 0x7f7f2948b95e in R_execClosure /tmp/R-devel/src/main/eval.c:2389
2026-03-17T02:20:48.1190006Z #85 0x7f7f2948c727 in applyClosure_core /tmp/R-devel/src/main/eval.c:2302
2026-03-17T02:20:48.1190196Z #86 0x7f7f29489aac in Rf_applyClosure /tmp/R-devel/src/main/eval.c:2324
2026-03-17T02:20:48.1190346Z #87 0x7f7f29489aac in Rf_eval /tmp/R-devel/src/main/eval.c:1280
2026-03-17T02:20:48.1190515Z #88 0x7f7f2948a2f6 in forcePromise /tmp/R-devel/src/main/eval.c:976
2026-03-17T02:20:48.1190677Z #89 0x7f7f29489c6f in forcePromise /tmp/R-devel/src/main/eval.c:956
2026-03-17T02:20:48.1190829Z #90 0x7f7f29489c6f in Rf_eval /tmp/R-devel/src/main/eval.c:1193
2026-03-17T02:20:48.1191002Z #91 0x7f7f294d8c9b in do_usemethod /tmp/R-devel/src/main/objects.c:575
2026-03-17T02:20:48.1191165Z #92 0x7f7f2947db1b in bcEval_loop /tmp/R-devel/src/main/eval.c:8152
2026-03-17T02:20:48.1191315Z #93 0x7f7f2948959a in bcEval /tmp/R-devel/src/main/eval.c:7515
2026-03-17T02:20:48.1191459Z #94 0x7f7f2948959a in bcEval /tmp/R-devel/src/main/eval.c:7500
2026-03-17T02:20:48.1191613Z #95 0x7f7f2948995a in Rf_eval /tmp/R-devel/src/main/eval.c:1167
2026-03-17T02:20:48.1191780Z #96 0x7f7f2948b95e in R_execClosure /tmp/R-devel/src/main/eval.c:2389
2026-03-17T02:20:48.1192027Z #97 0x7f7f2948c727 in applyClosure_core /tmp/R-devel/src/main/eval.c:2302
2026-03-17T02:20:48.1192202Z #98 0x7f7f29489aac in Rf_applyClosure /tmp/R-devel/src/main/eval.c:2324
2026-03-17T02:20:48.1192355Z #99 0x7f7f29489aac in Rf_eval /tmp/R-devel/src/main/eval.c:1280
2026-03-17T02:20:48.1192512Z #100 0x7f7f2949004e in do_eval /tmp/R-devel/src/main/eval.c:3955
2026-03-17T02:20:48.1192679Z #101 0x7f7f2947dd48 in bcEval_loop /tmp/R-devel/src/main/eval.c:8132
2026-03-17T02:20:48.1192935Z #102 0x7f7f2948959a in bcEval /tmp/R-devel/src/main/eval.c:7515
2026-03-17T02:20:48.1193084Z #103 0x7f7f2948959a in bcEval /tmp/R-devel/src/main/eval.c:7500
2026-03-17T02:20:48.1193243Z #104 0x7f7f2948995a in Rf_eval /tmp/R-devel/src/main/eval.c:1167
2026-03-17T02:20:48.1193413Z #105 0x7f7f2948a2f6 in forcePromise /tmp/R-devel/src/main/eval.c:976
2026-03-17T02:20:48.1193585Z #106 0x7f7f29489b79 in forcePromise /tmp/R-devel/src/main/eval.c:956
2026-03-17T02:20:48.1193743Z #107 0x7f7f29489b79 in Rf_eval /tmp/R-devel/src/main/eval.c:1187
2026-03-17T02:20:48.1193917Z #108 0x7f7f29490a0b in do_withVisible /tmp/R-devel/src/main/eval.c:3998
2026-03-17T02:20:48.1194089Z #109 0x7f7f294d5d02 in do_internal /tmp/R-devel/src/main/names.c:1419
2026-03-17T02:20:48.1194253Z #110 0x7f7f2947db1b in bcEval_loop /tmp/R-devel/src/main/eval.c:8152
2026-03-17T02:20:48.1194404Z #111 0x7f7f2948959a in bcEval /tmp/R-devel/src/main/eval.c:7515
2026-03-17T02:20:48.1194551Z #112 0x7f7f2948959a in bcEval /tmp/R-devel/src/main/eval.c:7500
2026-03-17T02:20:48.1194711Z #113 0x7f7f2948995a in Rf_eval /tmp/R-devel/src/main/eval.c:1167
2026-03-17T02:20:48.1194878Z #114 0x7f7f2948a2f6 in forcePromise /tmp/R-devel/src/main/eval.c:976
2026-03-17T02:20:48.1195049Z #115 0x7f7f29489b79 in forcePromise /tmp/R-devel/src/main/eval.c:956
2026-03-17T02:20:48.1195196Z #116 0x7f7f29489b79 in Rf_eval /tmp/R-devel/src/main/eval.c:1187
2026-03-17T02:20:48.1195361Z #117 0x7f7f2948a2f6 in forcePromise /tmp/R-devel/src/main/eval.c:976
2026-03-17T02:20:48.1195531Z #118 0x7f7f2948a604 in forcePromise /tmp/R-devel/src/main/eval.c:956
2026-03-17T02:20:48.1195680Z #119 0x7f7f2948a604 in getvar /tmp/R-devel/src/main/eval.c:5849
2026-03-17T02:20:48.1195850Z #120 0x7f7f294822c3 in bcEval_loop /tmp/R-devel/src/main/eval.c:7862
2026-03-17T02:20:48.1195995Z #121 0x7f7f2948959a in bcEval /tmp/R-devel/src/main/eval.c:7515
2026-03-17T02:20:48.1196145Z #122 0x7f7f2948959a in bcEval /tmp/R-devel/src/main/eval.c:7500
2026-03-17T02:20:48.1196295Z #123 0x7f7f2948995a in Rf_eval /tmp/R-devel/src/main/eval.c:1167
2026-03-17T02:20:48.1196475Z #124 0x7f7f2948b95e in R_execClosure /tmp/R-devel/src/main/eval.c:2389
2026-03-17T02:20:48.1196660Z #125 0x7f7f2948c727 in applyClosure_core /tmp/R-devel/src/main/eval.c:2302
2026-03-17T02:20:48.1196892Z #126 0x7f7f29489aac in Rf_applyClosure /tmp/R-devel/src/main/eval.c:2324
2026-03-17T02:20:48.1197051Z #127 0x7f7f29489aac in Rf_eval /tmp/R-devel/src/main/eval.c:1280
2026-03-17T02:20:48.1197200Z #128 0x7f7f2949004e in do_eval /tmp/R-devel/src/main/eval.c:3955
2026-03-17T02:20:48.1197367Z #129 0x7f7f2947dd48 in bcEval_loop /tmp/R-devel/src/main/eval.c:8132
2026-03-17T02:20:48.1197514Z #130 0x7f7f2948959a in bcEval /tmp/R-devel/src/main/eval.c:7515
2026-03-17T02:20:48.1197665Z #131 0x7f7f2948959a in bcEval /tmp/R-devel/src/main/eval.c:7500
2026-03-17T02:20:48.1197815Z #132 0x7f7f2948995a in Rf_eval /tmp/R-devel/src/main/eval.c:1167
2026-03-17T02:20:48.1197992Z #133 0x7f7f2948b95e in R_execClosure /tmp/R-devel/src/main/eval.c:2389
2026-03-17T02:20:48.1198174Z #134 0x7f7f2948c727 in applyClosure_core /tmp/R-devel/src/main/eval.c:2302
2026-03-17T02:20:48.1198350Z #135 0x7f7f29489aac in Rf_applyClosure /tmp/R-devel/src/main/eval.c:2324
2026-03-17T02:20:48.1198507Z #136 0x7f7f29489aac in Rf_eval /tmp/R-devel/src/main/eval.c:1280
2026-03-17T02:20:48.1198710Z #137 0x7f7f2948d4f4 in do_begin /tmp/R-devel/src/main/eval.c:2992
2026-03-17T02:20:48.1199103Z #138 0x7f7f29489d5f in Rf_eval /tmp/R-devel/src/main/eval.c:1232
2026-03-17T02:20:48.1199363Z #139 0x7f7f2949004e in do_eval /tmp/R-devel/src/main/eval.c:3955
2026-03-17T02:20:48.1199642Z #140 0x7f7f2947dd48 in bcEval_loop /tmp/R-devel/src/main/eval.c:8132
Is there something that needs updating in stringi's detection code to use the system ICU on GCC 15? Or perhaps an update to the ICU that's bundled? Happy to help with any more information I can.
I help maintain the Arrow package, and we noticed a recent sanitizer error in one of our tests that ultimately touches stringi code. The change seems to come from changing from GCC14 to GCC15 in our runner image (rhub's gcc-asan) which seems to cause the stringi package to end up using the bundled ICU instead of the system ICU.
From a passing build:
From a failing build:
This change then causes the following sanitizer error (which appears all in stringi / ICU code):
Is there something that needs updating in stringi's detection code to use the system ICU on GCC 15? Or perhaps an update to the ICU that's bundled? Happy to help with any more information I can.