int sz = piMini(ba.size_s(), max_size); memcpy(read_to, ba.data(), sz);
В случае передачи max_size < 0 получим жуткие косяки:
В первом варианте получаем неявное преобразование int в size_t и как сдедствие повисание или выход за границы при попытке записи 4гб данных.
Во втором случае получаем ровно тоже самое по причине того же неявного преобразования, потому что piMini вернет отрицательное значение.
Отдельный случай с PIIOString который фееричен ещё и неправильной работой PIString::mid(), см. #98
Обычно чтение сводится к 2м вариантам:
1. `::read(fd, read_to, max_size);`
2. `int sz = piMini(ba.size_s(), max_size); memcpy(read_to, ba.data(), sz);`
В случае передачи max_size < 0 получим жуткие косяки:
В первом варианте получаем неявное преобразование int в size_t и как сдедствие повисание или выход за границы при попытке записи 4гб данных.
Во втором случае получаем ровно тоже самое по причине того же неявного преобразования, потому что piMini вернет отрицательное значение.
Отдельный случай с PIIOString который фееричен ещё и неправильной работой PIString::mid(), см. #98
andrey
added the Баг label 2022-07-27 15:06:38 +03:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Обычно чтение сводится к 2м вариантам:
::read(fd, read_to, max_size);int sz = piMini(ba.size_s(), max_size); memcpy(read_to, ba.data(), sz);В случае передачи max_size < 0 получим жуткие косяки:
В первом варианте получаем неявное преобразование int в size_t и как сдедствие повисание или выход за границы при попытке записи 4гб данных.
Во втором случае получаем ровно тоже самое по причине того же неявного преобразования, потому что piMini вернет отрицательное значение.
Отдельный случай с PIIOString который фееричен ещё и неправильной работой PIString::mid(), см. #98
И ещё по хорошему нужно подумать о поддержке чтения более 2гб в память для PIP3, на будущее чтобы не менять потом API