mirror of
https://github.com/morgan9e/FreeRDP
synced 2026-04-14 00:14:11 +09:00
[client,common] check _fseeki64 return
propagate error conditions back the call chain
This commit is contained in:
@@ -1021,24 +1021,22 @@ BOOL freerdp_client_parse_rdp_file_ex(rdpFile* file, const char* name, rdp_file_
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
(void)_fseeki64(fp, 0, SEEK_END);
|
if (_fseeki64(fp, 0, SEEK_END) < 0)
|
||||||
|
goto fail;
|
||||||
file_size = _ftelli64(fp);
|
file_size = _ftelli64(fp);
|
||||||
(void)_fseeki64(fp, 0, SEEK_SET);
|
if (_fseeki64(fp, 0, SEEK_SET) < 0)
|
||||||
|
goto fail;
|
||||||
|
|
||||||
if (file_size < 1)
|
if (file_size < 1)
|
||||||
{
|
{
|
||||||
WLog_ERR(TAG, "RDP file %s is empty", name);
|
WLog_ERR(TAG, "RDP file %s is empty", name);
|
||||||
(void)fclose(fp);
|
goto fail;
|
||||||
return FALSE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
buffer = (BYTE*)malloc((size_t)file_size + 2);
|
buffer = (BYTE*)malloc((size_t)file_size + 2);
|
||||||
|
|
||||||
if (!buffer)
|
if (!buffer)
|
||||||
{
|
goto fail;
|
||||||
(void)fclose(fp);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
read_size = fread(buffer, (size_t)file_size, 1, fp);
|
read_size = fread(buffer, (size_t)file_size, 1, fp);
|
||||||
|
|
||||||
@@ -1048,18 +1046,18 @@ BOOL freerdp_client_parse_rdp_file_ex(rdpFile* file, const char* name, rdp_file_
|
|||||||
read_size = (size_t)file_size;
|
read_size = (size_t)file_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
(void)fclose(fp);
|
|
||||||
|
|
||||||
if (read_size < 1)
|
if (read_size < 1)
|
||||||
{
|
{
|
||||||
WLog_ERR(TAG, "Could not read from RDP file %s", name);
|
WLog_ERR(TAG, "Could not read from RDP file %s", name);
|
||||||
free(buffer);
|
goto fail;
|
||||||
return FALSE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
buffer[file_size] = '\0';
|
buffer[file_size] = '\0';
|
||||||
buffer[file_size + 1] = '\0';
|
buffer[file_size + 1] = '\0';
|
||||||
status = freerdp_client_parse_rdp_file_buffer_ex(file, buffer, (size_t)file_size, parse);
|
status = freerdp_client_parse_rdp_file_buffer_ex(file, buffer, (size_t)file_size, parse);
|
||||||
|
|
||||||
|
fail:
|
||||||
|
(void)fclose(fp);
|
||||||
free(buffer);
|
free(buffer);
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user