rpc: additional verification of message data (#1576)
* rpc: additional verification of message data * rpc: storage: fixed read handler * acessor: fixed record naming
This commit is contained in:
parent
1d50a5981e
commit
add2497a1c
@ -32,14 +32,14 @@ void AccessorApp::run(void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
AccessorApp::AccessorApp() {
|
AccessorApp::AccessorApp() {
|
||||||
notification = static_cast<NotificationApp*>(furi_record_open("notification"));
|
notification = static_cast<NotificationApp*>(furi_record_open(RECORD_NOTIFICATION));
|
||||||
onewire_host = onewire_host_alloc();
|
onewire_host = onewire_host_alloc();
|
||||||
furi_hal_power_enable_otg();
|
furi_hal_power_enable_otg();
|
||||||
}
|
}
|
||||||
|
|
||||||
AccessorApp::~AccessorApp() {
|
AccessorApp::~AccessorApp() {
|
||||||
furi_hal_power_disable_otg();
|
furi_hal_power_disable_otg();
|
||||||
furi_record_close("notification");
|
furi_record_close(RECORD_NOTIFICATION);
|
||||||
onewire_host_free(onewire_host);
|
onewire_host_free(onewire_host);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -15,7 +15,7 @@ AccessorAppViewManager::AccessorAppViewManager() {
|
|||||||
popup = popup_alloc();
|
popup = popup_alloc();
|
||||||
add_view(ViewType::Popup, popup_get_view(popup));
|
add_view(ViewType::Popup, popup_get_view(popup));
|
||||||
|
|
||||||
gui = static_cast<Gui*>(furi_record_open("gui"));
|
gui = static_cast<Gui*>(furi_record_open(RECORD_GUI));
|
||||||
view_dispatcher_attach_to_gui(view_dispatcher, gui, ViewDispatcherTypeFullscreen);
|
view_dispatcher_attach_to_gui(view_dispatcher, gui, ViewDispatcherTypeFullscreen);
|
||||||
|
|
||||||
// set previous view callback for all views
|
// set previous view callback for all views
|
||||||
@ -31,6 +31,7 @@ AccessorAppViewManager::~AccessorAppViewManager() {
|
|||||||
view_dispatcher, static_cast<uint32_t>(AccessorAppViewManager::ViewType::Popup));
|
view_dispatcher, static_cast<uint32_t>(AccessorAppViewManager::ViewType::Popup));
|
||||||
|
|
||||||
// free view modules
|
// free view modules
|
||||||
|
furi_record_close(RECORD_GUI);
|
||||||
submenu_free(submenu);
|
submenu_free(submenu);
|
||||||
popup_free(popup);
|
popup_free(popup);
|
||||||
|
|
||||||
|
@ -297,9 +297,9 @@ static void rpc_system_storage_read_process(const PB_Main* request, void* contex
|
|||||||
const char* path = request->content.storage_read_request.path;
|
const char* path = request->content.storage_read_request.path;
|
||||||
Storage* fs_api = furi_record_open(RECORD_STORAGE);
|
Storage* fs_api = furi_record_open(RECORD_STORAGE);
|
||||||
File* file = storage_file_alloc(fs_api);
|
File* file = storage_file_alloc(fs_api);
|
||||||
bool result = false;
|
bool fs_operation_success = storage_file_open(file, path, FSAM_READ, FSOM_OPEN_EXISTING);
|
||||||
|
|
||||||
if(storage_file_open(file, path, FSAM_READ, FSOM_OPEN_EXISTING)) {
|
if(fs_operation_success) {
|
||||||
size_t size_left = storage_file_size(file);
|
size_t size_left = storage_file_size(file);
|
||||||
do {
|
do {
|
||||||
response->command_id = request->command_id;
|
response->command_id = request->command_id;
|
||||||
@ -310,28 +310,25 @@ static void rpc_system_storage_read_process(const PB_Main* request, void* contex
|
|||||||
if(read_size) {
|
if(read_size) {
|
||||||
response->content.storage_read_response.has_file = true;
|
response->content.storage_read_response.has_file = true;
|
||||||
response->content.storage_read_response.file.data =
|
response->content.storage_read_response.file.data =
|
||||||
malloc(PB_BYTES_ARRAY_T_ALLOCSIZE());
|
malloc(PB_BYTES_ARRAY_T_ALLOCSIZE(read_size));
|
||||||
uint8_t* buffer = response->content.storage_read_response.file.data->bytes;
|
uint8_t* buffer = &response->content.storage_read_response.file.data->bytes[0];
|
||||||
uint16_t* read_size_msg = &response->content.storage_read_response.file.data->size;
|
uint16_t* read_size_msg = &response->content.storage_read_response.file.data->size;
|
||||||
|
|
||||||
*read_size_msg = storage_file_read(file, buffer, read_size);
|
*read_size_msg = storage_file_read(file, buffer, read_size);
|
||||||
size_left -= read_size;
|
size_left -= *read_size_msg;
|
||||||
result = (*read_size_msg == read_size);
|
fs_operation_success = (*read_size_msg == read_size);
|
||||||
|
|
||||||
response->has_next = result && (size_left > 0);
|
response->has_next = fs_operation_success && (size_left > 0);
|
||||||
} else {
|
} else {
|
||||||
response->content.storage_read_response.has_file = false;
|
response->content.storage_read_response.has_file = false;
|
||||||
response->has_next = false;
|
response->has_next = false;
|
||||||
result = true;
|
fs_operation_success = true;
|
||||||
}
|
}
|
||||||
|
} while((size_left != 0) && fs_operation_success);
|
||||||
|
}
|
||||||
|
|
||||||
rpc_send_and_release(session, response);
|
if(fs_operation_success) {
|
||||||
} while((size_left != 0) && result);
|
rpc_send_and_release(session, response);
|
||||||
|
|
||||||
if(!result) {
|
|
||||||
rpc_send_and_release_empty(
|
|
||||||
session, request->command_id, rpc_system_storage_get_file_error(file));
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
rpc_send_and_release_empty(
|
rpc_send_and_release_empty(
|
||||||
session, request->command_id, rpc_system_storage_get_file_error(file));
|
session, request->command_id, rpc_system_storage_get_file_error(file));
|
||||||
@ -384,7 +381,9 @@ static void rpc_system_storage_write_process(const PB_Main* request, void* conte
|
|||||||
bool send_response = false;
|
bool send_response = false;
|
||||||
|
|
||||||
if(fs_operation_success) {
|
if(fs_operation_success) {
|
||||||
if(request->content.storage_write_request.has_file) {
|
if(request->content.storage_write_request.has_file &&
|
||||||
|
request->content.storage_write_request.file.data &&
|
||||||
|
request->content.storage_write_request.file.data->size) {
|
||||||
uint8_t* buffer = request->content.storage_write_request.file.data->bytes;
|
uint8_t* buffer = request->content.storage_write_request.file.data->bytes;
|
||||||
size_t buffer_size = request->content.storage_write_request.file.data->size;
|
size_t buffer_size = request->content.storage_write_request.file.data->size;
|
||||||
uint16_t written_size = storage_file_write(file, buffer, buffer_size);
|
uint16_t written_size = storage_file_write(file, buffer, buffer_size);
|
||||||
|
Loading…
Reference in New Issue
Block a user