diff --git a/rhizome_database.c b/rhizome_database.c index 9a0dc783..4d0cd49a 100644 --- a/rhizome_database.c +++ b/rhizome_database.c @@ -115,7 +115,6 @@ int rhizome_opendb() /* Create tables if required */ if (sqlite3_exec(rhizome_db,"PRAGMA auto_vacuum=2;",NULL,NULL,NULL)) { fprintf(stderr,"SQLite could enable incremental vacuuming: %s\n",sqlite3_errmsg(rhizome_db)); - exit(1); } if (sqlite3_exec(rhizome_db,"CREATE TABLE IF NOT EXISTS GROUPLIST(id text not null primary key, closed integer,ciphered integer,priority integer);",NULL,NULL,NULL)) { diff --git a/rhizome_packetformats.c b/rhizome_packetformats.c index 51f0a246..6e38483b 100644 --- a/rhizome_packetformats.c +++ b/rhizome_packetformats.c @@ -133,9 +133,11 @@ int overlay_rhizome_add_advertisements(int interface_number,overlay_buffer *e) fprintf(stderr,"%d bundles in database (%d %d), slots=%d.\n",bundles_available, bundle_offset[0],bundle_offset[1],slots); + sqlite3_stmt *statement=NULL; + sqlite3_blob *blob=NULL; + for(pass=skipmanifests;pass<2;pass++) { - sqlite3_stmt *statement; char query[1024]; switch(pass) { case 0: /* Full manifests */ @@ -153,9 +155,8 @@ int overlay_rhizome_add_advertisements(int interface_number,overlay_buffer *e) case SQLITE_OK: case SQLITE_DONE: case SQLITE_ROW: break; default: - sqlite3_finalize(statement); - sqlite3_close(rhizome_db); - rhizome_db=NULL; + sqlite3_finalize(statement); statement=NULL; + sqlite3_close(rhizome_db); rhizome_db=NULL; WHY(query); WHY(sqlite3_errmsg(rhizome_db)); return WHY("Could not prepare sql statement for fetching BARs for advertisement."); @@ -163,10 +164,10 @@ int overlay_rhizome_add_advertisements(int interface_number,overlay_buffer *e) while((bytes_usedlength+RHIZOME_BAR_BYTES<=e->sizeLimit)) { - sqlite3_blob *blob; int column_type=sqlite3_column_type(statement, 0); switch(column_type) { case SQLITE_BLOB: + if (blob) sqlite3_blob_close(blob); blob=NULL; if (sqlite3_blob_open(rhizome_db,"main","manifests", pass?"bar":"manifest", sqlite3_column_int64(statement,1) /* rowid */, @@ -179,7 +180,7 @@ int overlay_rhizome_add_advertisements(int interface_number,overlay_buffer *e) if (pass&&(blob_bytes!=RHIZOME_BAR_BYTES)) { if (debug&DEBUG_RHIZOME) fprintf(stderr,"Found a BAR that is the wrong size - ignoring\n"); - sqlite3_blob_close(blob); + sqlite3_blob_close(blob); blob=NULL; continue; } @@ -187,7 +188,7 @@ int overlay_rhizome_add_advertisements(int interface_number,overlay_buffer *e) Longer ones are only advertised by BAR */ if (blob_bytes>1024) { fprintf(stderr,"blob>1k - ignoring\n"); - sqlite3_blob_close(blob); + sqlite3_blob_close(blob); blob=NULL; continue; } @@ -216,12 +217,12 @@ int overlay_rhizome_add_advertisements(int interface_number,overlay_buffer *e) fprintf(stderr,"length bytes written at offset 0x%x\n",e->length); } if (frameFull) { - sqlite3_blob_close(blob); + sqlite3_blob_close(blob); blob=NULL; goto stopStuffing; } if (e->length+overhead+blob_bytes>=e->allocSize) { WHY("Reading blob will overflow overlay_buffer"); - sqlite3_blob_close(blob); + sqlite3_blob_close(blob); blob=NULL; continue; } if (sqlite3_blob_read(blob,&e->bytes[e->length+overhead],blob_bytes,0) @@ -233,7 +234,7 @@ int overlay_rhizome_add_advertisements(int interface_number,overlay_buffer *e) } if (debug&DEBUG_RHIZOME) WHY("Couldn't read from blob"); - sqlite3_blob_close(blob); + sqlite3_blob_close(blob); blob=NULL; dump("buffer (225)",(unsigned char *)e,sizeof(*e)); continue; @@ -241,18 +242,19 @@ int overlay_rhizome_add_advertisements(int interface_number,overlay_buffer *e) e->length+=overhead+blob_bytes; if (e->length>e->allocSize) { WHY("e->length > e->size"); - sqlite3_blob_close(blob); + sqlite3_blob_close(blob); blob=NULL; abort(); } bytes_used+=overhead+blob_bytes; bundles_advertised++; bundle_offset[pass]=sqlite3_column_int64(statement,1); - sqlite3_blob_close(blob); + sqlite3_blob_close(blob); blob=NULL; } } - sqlite3_finalize(statement); stopStuffing: + if (blob) sqlite3_blob_close(blob); blob=NULL; + if (statement) sqlite3_finalize(statement); statement=NULL; if (!pass) { /* Mark end of whole manifests by writing 0xff, which is more than the MSB @@ -261,6 +263,9 @@ int overlay_rhizome_add_advertisements(int interface_number,overlay_buffer *e) bytes_used++; } } + + if (blob) sqlite3_blob_close(blob); blob=NULL; + if (statement) sqlite3_finalize(statement); statement=NULL; if (debug&DEBUG_RHIZOME) printf("Appended %d rhizome advertisements to packet using %d bytes.\n",bundles_advertised,bytes_used); int rfs_value=1+8+1+1+1+bytes_used;