mirror of
https://gitlab.linphone.org/BC/public/linphone-iphone.git
synced 2026-01-29 17:29:20 +00:00
Do not access the fd field of the bctbx_file_t as it may not be set by some vfs implementation. Furthermore if the file fails to open bctbx_file_open returns NULL and so accessing the fd field will result in a crash.
This commit is contained in:
parent
7d9a8dfeca
commit
f7a8db5e0f
1 changed files with 16 additions and 33 deletions
|
|
@ -397,10 +397,6 @@ LpConfig * lp_config_new_from_buffer(const char *buffer){
|
|||
}
|
||||
|
||||
LpConfig *lp_config_new_with_factory(const char *config_filename, const char *factory_config_filename) {
|
||||
|
||||
int fd;
|
||||
bctbx_vfs_file_t* pFile = NULL;
|
||||
|
||||
LpConfig *lpconfig=lp_new0(LpConfig,1);
|
||||
lpconfig->g_bctbx_vfs = bctbx_vfs_get_default();
|
||||
|
||||
|
|
@ -430,23 +426,20 @@ LpConfig *lp_config_new_with_factory(const char *config_filename, const char *fa
|
|||
}
|
||||
}
|
||||
#endif /*_WIN32*/
|
||||
/*open with r+ to check if we can write on it later*/
|
||||
|
||||
pFile = bctbx_file_open(lpconfig->g_bctbx_vfs,lpconfig->filename, "r+");
|
||||
fd = pFile->fd;
|
||||
lpconfig->pFile = pFile;
|
||||
|
||||
/*open with r+ to check if we can write on it later*/
|
||||
lpconfig->pFile = bctbx_file_open(lpconfig->g_bctbx_vfs,lpconfig->filename, "r+");
|
||||
#ifdef RENAME_REQUIRES_NONEXISTENT_NEW_PATH
|
||||
if (fd == -1){
|
||||
pFile = bctbx_file_open(lpconfig->g_bctbx_vfs,lpconfig->tmpfilename, "r+");
|
||||
if (fd){
|
||||
if (lpconfig->pFile == NULL){
|
||||
lpconfig->pFile = bctbx_file_open(lpconfig->g_bctbx_vfs,lpconfig->tmpfilename, "r+");
|
||||
if (lpconfig->pFile == NULL){
|
||||
ms_warning("Could not open %s but %s works, app may have crashed during last sync.",lpconfig->filename,lpconfig->tmpfilename);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
if (fd != -1){
|
||||
lp_config_parse(lpconfig, pFile);
|
||||
bctbx_file_close(pFile);
|
||||
if (lpconfig->pFile != NULL){
|
||||
lp_config_parse(lpconfig, lpconfig->pFile);
|
||||
bctbx_file_close(lpconfig->pFile);
|
||||
lpconfig->pFile = NULL;
|
||||
lpconfig->modified=0;
|
||||
}
|
||||
|
|
@ -463,10 +456,8 @@ fail:
|
|||
|
||||
int lp_config_read_file(LpConfig *lpconfig, const char *filename){
|
||||
char* path = lp_realpath(filename, NULL);
|
||||
int fd=-1;
|
||||
bctbx_vfs_file_t* pFile = bctbx_file_open(lpconfig->g_bctbx_vfs, path, "r");
|
||||
fd = pFile->fd;
|
||||
if (fd != -1){
|
||||
if (pFile != NULL){
|
||||
ms_message("Reading config information from %s", path);
|
||||
lp_config_parse(lpconfig, pFile);
|
||||
bctbx_file_close(pFile);
|
||||
|
|
@ -927,7 +918,7 @@ static const char *_lp_config_dirname(char *path) {
|
|||
}
|
||||
|
||||
bool_t lp_config_relative_file_exists(const LpConfig *lpconfig, const char *filename) {
|
||||
bctbx_vfs_file_t *pFile = lpconfig->pFile;
|
||||
bctbx_vfs_file_t *pFile;
|
||||
if (lpconfig->filename == NULL) {
|
||||
return FALSE;
|
||||
} else {
|
||||
|
|
@ -943,10 +934,10 @@ bool_t lp_config_relative_file_exists(const LpConfig *lpconfig, const char *file
|
|||
|
||||
pFile = bctbx_file_open(lpconfig->g_bctbx_vfs,realfilepath, "r");
|
||||
ms_free(realfilepath);
|
||||
if (pFile->fd != -1) {
|
||||
if (pFile != NULL) {
|
||||
bctbx_file_close(pFile);
|
||||
}
|
||||
return pFile->fd > 0;
|
||||
return pFile != NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -955,9 +946,8 @@ void lp_config_write_relative_file(const LpConfig *lpconfig, const char *filenam
|
|||
const char *dir = NULL;
|
||||
char *filepath = NULL;
|
||||
char *realfilepath = NULL;
|
||||
int fd = 0;
|
||||
bctbx_vfs_file_t *pFile;
|
||||
|
||||
bctbx_vfs_file_t *pFile = lpconfig->pFile;
|
||||
if (lpconfig->filename == NULL) return;
|
||||
|
||||
if(strlen(data) == 0) {
|
||||
|
|
@ -974,10 +964,8 @@ void lp_config_write_relative_file(const LpConfig *lpconfig, const char *filenam
|
|||
goto end;
|
||||
}
|
||||
|
||||
pFile = bctbx_file_open(lpconfig->g_bctbx_vfs,realfilepath, "w");
|
||||
fd = pFile->fd;
|
||||
|
||||
if(fd == -1) {
|
||||
pFile = bctbx_file_open(lpconfig->g_bctbx_vfs,realfilepath, "w");
|
||||
if(pFile == NULL) {
|
||||
ms_error("Could not open %s for write", realfilepath);
|
||||
goto end;
|
||||
}
|
||||
|
|
@ -994,7 +982,6 @@ int lp_config_read_relative_file(const LpConfig *lpconfig, const char *filename,
|
|||
char *dup_config_file = NULL;
|
||||
const char *dir = NULL;
|
||||
char *filepath = NULL;
|
||||
int fd = 0;
|
||||
bctbx_vfs_file_t* pFile = NULL;
|
||||
|
||||
char* realfilepath = NULL;
|
||||
|
|
@ -1011,15 +998,11 @@ int lp_config_read_relative_file(const LpConfig *lpconfig, const char *filename,
|
|||
}
|
||||
|
||||
pFile = bctbx_file_open(lpconfig->g_bctbx_vfs,realfilepath,"r");
|
||||
if (pFile !=NULL)
|
||||
fd = pFile->fd;
|
||||
|
||||
if(fd == -1 ) {
|
||||
if (pFile == NULL) {
|
||||
ms_error("Could not open %s for read.", realfilepath);
|
||||
goto err;
|
||||
}
|
||||
|
||||
|
||||
if(bctbx_file_read(pFile, data, 1, (off_t)max_length) < 0){
|
||||
ms_error("%s could not be loaded.", realfilepath);
|
||||
goto err;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue