PIIOdevice read и write умирают при отрицательном max_size #99

Closed
opened 2022-07-27 14:53:49 +03:00 by andrey · 1 comment
Owner

Обычно чтение сводится к 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

Обычно чтение сводится к 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
Author
Owner

И ещё по хорошему нужно подумать о поддержке чтения более 2гб в память для PIP3, на будущее чтобы не менять потом API

И ещё по хорошему нужно подумать о поддержке чтения более 2гб в память для PIP3, на будущее чтобы не менять потом API
andrey added this to the pip 3 milestone 2022-07-27 15:08:54 +03:00
peri4 closed this issue 2022-08-01 19:10:30 +03:00
Sign in to join this conversation.