mirror of
https://github.com/nextcloud/desktop.git
synced 2024-11-24 05:55:59 +03:00
ownCloud: Fix mem leaks to bring valgrind down to zero loss.
This commit is contained in:
parent
36b1e21c45
commit
3cbc0e5d7e
1 changed files with 37 additions and 16 deletions
|
@ -393,7 +393,7 @@ static int dav_connect(const char *base_url) {
|
|||
|
||||
ne_set_read_timeout(dav_session.ctx, timeout);
|
||||
snprintf( uaBuf, sizeof(uaBuf), "csyncoC/%s",CSYNC_STRINGIFY( LIBCSYNC_VERSION ));
|
||||
ne_set_useragent( dav_session.ctx, c_strdup( uaBuf ));
|
||||
ne_set_useragent( dav_session.ctx, uaBuf);
|
||||
ne_set_server_auth(dav_session.ctx, ne_auth, 0 );
|
||||
|
||||
if( useSSL ) {
|
||||
|
@ -411,6 +411,9 @@ static int dav_connect(const char *base_url) {
|
|||
_connected = 1;
|
||||
rc = 0;
|
||||
out:
|
||||
SAFE_FREE(path);
|
||||
SAFE_FREE(host);
|
||||
SAFE_FREE(scheme);
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
@ -587,6 +590,29 @@ static int _stat_perms( int type ) {
|
|||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* free the fetchCtx
|
||||
*/
|
||||
static void free_fetchCtx( struct listdir_context *ctx )
|
||||
{
|
||||
struct resource *newres = ctx->list;
|
||||
struct resource *res = newres;
|
||||
if( ! ctx ) return;
|
||||
|
||||
SAFE_FREE(ctx->target);
|
||||
|
||||
while( res ) {
|
||||
SAFE_FREE(res->uri);
|
||||
SAFE_FREE(res->name);
|
||||
|
||||
newres = res->next;
|
||||
SAFE_FREE(res);
|
||||
res = newres;
|
||||
}
|
||||
SAFE_FREE(ctx);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* file functions
|
||||
*/
|
||||
|
@ -652,7 +678,7 @@ static int owncloud_stat(const char *uri, csync_vio_file_stat_t *buf) {
|
|||
errno = ne_session_error_errno( dav_session.ctx );
|
||||
|
||||
DEBUG_WEBDAV("stat fails with errno %d", errno );
|
||||
SAFE_FREE(fetchCtx);
|
||||
free_fetchCtx(fetchCtx);
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
@ -690,7 +716,8 @@ static int owncloud_stat(const char *uri, csync_vio_file_stat_t *buf) {
|
|||
|
||||
csync_vio_file_stat_destroy( lfs );
|
||||
}
|
||||
SAFE_FREE( fetchCtx );
|
||||
|
||||
free_fetchCtx( fetchCtx );
|
||||
}
|
||||
}
|
||||
DEBUG_WEBDAV("STAT result: %s, type=%d", buf->name ? buf->name:"NULL",
|
||||
|
@ -838,7 +865,7 @@ static csync_vio_method_handle_t *owncloud_open(const char *durl,
|
|||
#endif
|
||||
|
||||
struct transfer_context *writeCtx = NULL;
|
||||
csync_stat_t statBuf;
|
||||
csync_vio_file_stat_t statBuf;
|
||||
memset( getUrl, '\0', PATH_MAX );
|
||||
|
||||
(void) mode; /* unused on webdav server */
|
||||
|
@ -870,6 +897,7 @@ static csync_vio_method_handle_t *owncloud_open(const char *durl,
|
|||
dir = c_dirname( durl );
|
||||
if (dir == NULL) {
|
||||
errno = ENOMEM;
|
||||
SAFE_FREE(uri);
|
||||
return NULL;
|
||||
}
|
||||
DEBUG_WEBDAV("Stating directory %s", dir );
|
||||
|
@ -877,6 +905,7 @@ static csync_vio_method_handle_t *owncloud_open(const char *durl,
|
|||
DEBUG_WEBDAV("Dir %s is there, we know it already.", dir);
|
||||
} else {
|
||||
if( owncloud_stat( dir, (csync_vio_method_handle_t*)(&statBuf) ) == 0 ) {
|
||||
SAFE_FREE(statBuf.name);
|
||||
DEBUG_WEBDAV("Directory of file to open exists.");
|
||||
SAFE_FREE( _lastDir );
|
||||
_lastDir = c_strdup(dir);
|
||||
|
@ -885,7 +914,9 @@ static csync_vio_method_handle_t *owncloud_open(const char *durl,
|
|||
DEBUG_WEBDAV("Directory %s of file to open does NOT exist.", dir );
|
||||
/* the directory does not exist. That is an ENOENT */
|
||||
errno = ENOENT;
|
||||
SAFE_FREE( dir );
|
||||
SAFE_FREE(dir);
|
||||
SAFE_FREE(uri);
|
||||
SAFE_FREE(statBuf.name);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
@ -1250,21 +1281,11 @@ static csync_vio_method_handle_t *owncloud_opendir(const char *uri) {
|
|||
static int owncloud_closedir(csync_vio_method_handle_t *dhandle) {
|
||||
|
||||
struct listdir_context *fetchCtx = dhandle;
|
||||
struct resource *r = fetchCtx->list;
|
||||
struct resource *rnext = NULL;
|
||||
|
||||
DEBUG_WEBDAV("closedir method called %p!", dhandle);
|
||||
|
||||
while( r ) {
|
||||
rnext = r->next;
|
||||
SAFE_FREE(r->uri);
|
||||
SAFE_FREE(r->name);
|
||||
SAFE_FREE(r);
|
||||
r = rnext;
|
||||
}
|
||||
SAFE_FREE( fetchCtx->target );
|
||||
free_fetchCtx(fetchCtx);
|
||||
|
||||
SAFE_FREE( dhandle );
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue