Fossil SCM

Fix a serious memory leak in the "read" logic of the Fuse Filesystem.

drh 2014-06-14 14:31 trunk
Commit 7a7ef00b3500bb9b666addb9581322756be40d83
1 file changed +7
--- src/fusefs.c
+++ src/fusefs.c
@@ -245,10 +245,11 @@
245245
blob_reset(&fusefs.content);
246246
}
247247
fusefs.pFile = manifest_file_seek(fusefs.pMan, fusefs.az[2], 0);
248248
if( fusefs.pFile==0 ) return -ENOENT;
249249
rid = uuid_to_rid(fusefs.pFile->zUuid, 0);
250
+ blob_reset(&fusefs.content);
250251
content_get(rid, &fusefs.content);
251252
if( offset>blob_size(&fusefs.content) ) return 0;
252253
if( offset+size>blob_size(&fusefs.content) ){
253254
size = blob_size(&fusefs.content) - offset;
254255
}
@@ -296,11 +297,13 @@
296297
#ifndef FOSSIL_HAVE_FUSEFS
297298
fossil_fatal("this build of fossil does not support the fuse filesystem");
298299
#else
299300
char *zMountPoint;
300301
char *azNewArgv[5];
302
+ int i;
301303
int doDebug = find_option("debug","d",0)!=0;
304
+
302305
db_find_and_open_repository(0,0);
303306
verify_all_options();
304307
blob_init(&fusefs.content, 0, 0);
305308
if( g.argc!=3 ) usage("DIRECTORY");
306309
zMountPoint = g.argv[2];
@@ -312,7 +315,11 @@
312315
azNewArgv[2] = "-s";
313316
azNewArgv[3] = zMountPoint;
314317
azNewArgv[4] = 0;
315318
g.localOpen = 0; /* Prevent tags like "current" and "prev" */
316319
fuse_main(4, azNewArgv, &fusefs_methods, NULL);
320
+ manifest_destroy(fusefs.pMan);
321
+ blob_reset(&fusefs.content);
322
+ for(i=0; i<count(fusefs.az); i++) fossil_free(fusefs.az[i]);
323
+ memset(&fusefs, 0, sizeof(fusefs));
317324
#endif
318325
}
319326
--- src/fusefs.c
+++ src/fusefs.c
@@ -245,10 +245,11 @@
245 blob_reset(&fusefs.content);
246 }
247 fusefs.pFile = manifest_file_seek(fusefs.pMan, fusefs.az[2], 0);
248 if( fusefs.pFile==0 ) return -ENOENT;
249 rid = uuid_to_rid(fusefs.pFile->zUuid, 0);
 
250 content_get(rid, &fusefs.content);
251 if( offset>blob_size(&fusefs.content) ) return 0;
252 if( offset+size>blob_size(&fusefs.content) ){
253 size = blob_size(&fusefs.content) - offset;
254 }
@@ -296,11 +297,13 @@
296 #ifndef FOSSIL_HAVE_FUSEFS
297 fossil_fatal("this build of fossil does not support the fuse filesystem");
298 #else
299 char *zMountPoint;
300 char *azNewArgv[5];
 
301 int doDebug = find_option("debug","d",0)!=0;
 
302 db_find_and_open_repository(0,0);
303 verify_all_options();
304 blob_init(&fusefs.content, 0, 0);
305 if( g.argc!=3 ) usage("DIRECTORY");
306 zMountPoint = g.argv[2];
@@ -312,7 +315,11 @@
312 azNewArgv[2] = "-s";
313 azNewArgv[3] = zMountPoint;
314 azNewArgv[4] = 0;
315 g.localOpen = 0; /* Prevent tags like "current" and "prev" */
316 fuse_main(4, azNewArgv, &fusefs_methods, NULL);
 
 
 
 
317 #endif
318 }
319
--- src/fusefs.c
+++ src/fusefs.c
@@ -245,10 +245,11 @@
245 blob_reset(&fusefs.content);
246 }
247 fusefs.pFile = manifest_file_seek(fusefs.pMan, fusefs.az[2], 0);
248 if( fusefs.pFile==0 ) return -ENOENT;
249 rid = uuid_to_rid(fusefs.pFile->zUuid, 0);
250 blob_reset(&fusefs.content);
251 content_get(rid, &fusefs.content);
252 if( offset>blob_size(&fusefs.content) ) return 0;
253 if( offset+size>blob_size(&fusefs.content) ){
254 size = blob_size(&fusefs.content) - offset;
255 }
@@ -296,11 +297,13 @@
297 #ifndef FOSSIL_HAVE_FUSEFS
298 fossil_fatal("this build of fossil does not support the fuse filesystem");
299 #else
300 char *zMountPoint;
301 char *azNewArgv[5];
302 int i;
303 int doDebug = find_option("debug","d",0)!=0;
304
305 db_find_and_open_repository(0,0);
306 verify_all_options();
307 blob_init(&fusefs.content, 0, 0);
308 if( g.argc!=3 ) usage("DIRECTORY");
309 zMountPoint = g.argv[2];
@@ -312,7 +315,11 @@
315 azNewArgv[2] = "-s";
316 azNewArgv[3] = zMountPoint;
317 azNewArgv[4] = 0;
318 g.localOpen = 0; /* Prevent tags like "current" and "prev" */
319 fuse_main(4, azNewArgv, &fusefs_methods, NULL);
320 manifest_destroy(fusefs.pMan);
321 blob_reset(&fusefs.content);
322 for(i=0; i<count(fusefs.az); i++) fossil_free(fusefs.az[i]);
323 memset(&fusefs, 0, sizeof(fusefs));
324 #endif
325 }
326

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button