aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp/string_utils/csv/ya.make
diff options
context:
space:
mode:
authorpnv1 <pnv1@yandex-team.com>2024-12-10 16:48:40 +0300
committerpnv1 <pnv1@yandex-team.com>2024-12-10 17:11:35 +0300
commiteb079fb9449e62da43aac095244be3ffbe658cdf (patch)
treefc1c6e70e4d2a3c48f3765c027937552b5296a59 /library/cpp/string_utils/csv/ya.make
parent7f972801c725421d055c96fd78343874db860bbd (diff)
downloadydb-eb079fb9449e62da43aac095244be3ffbe658cdf.tar.gz
Make sure returned TStringBuffers do not change during splitter lifetime. Also make input string reference const
<https://github.com/ydb-platform/ydb/issues/12306> Make input string reference const Make sure returned TStringBuffers do not change during splitter lifetime splitter.Consume() возвращает TStringBuf. Если в колонке есть ескейпинг кавычек, вся колонка обрамлена двойными кавычками (`"`), а внутри для ескейпинга двойных кавычек используются две идущие подряд двойные кавычки (`""`). В таком случае вернуть TStringBuf, ссылающийся на кусок входящего TString, не получится, т.к. нужной подстроки в нем не существует. Для этого используется мембер TVector\<TStringbuf\> CustomStrings. В него накидываются нужные кусочки из исходной строки и в конце складываются в мембер-строку TString CustomString Например, из строки `"abc""cde""efg"` копились кусочки `abc"`, `cde"`, `efg` и в конце склеивались. И возвращался TStringBuf из этой строки-мембера. Проблема в том, что если в другой колонке той же строки также встречались кавычки с ескейпингом, эта строка-мембер CustomString очищалась. При том, что на неё всё еще ссылался возвращённый ранее TStringBuf. В итоге "предыдущий" TStringBuf либо начинал ссылаться на часть новой строки, если новая строка была длиннее, либо на часть новой строки \+ рандомный набор байт в памяти, если новая строка оказывалась короче. Фикс в том, чтобы хранить все строки, сгенерённые сплиттером, всё время жизни сплиттера commit_hash:aa4957e1d8030cd48d06eaa16a7ad61e878348f8
Diffstat (limited to 'library/cpp/string_utils/csv/ya.make')
0 files changed, 0 insertions, 0 deletions