PIIOdevice read и write умирают при отрицательном max_size #99
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Обычно чтение сводится к 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