
On 12/16/2014 06:53 PM, Eric Blake wrote:
On 12/16/2014 06:17 AM, John Ferlan wrote:
Ran the series through my local Coverity checker.... found one issue....
- format, NULL))) + if (format == VIR_STORAGE_FILE_RAW) { + disk->src->capacity = disk->src->physical; + } else if (!(meta = virStorageFileGetMetadataFromBuf(disk->src->path, buf, + len, format, NULL))) { goto endjob; - if (meta->capacity) - disk->src->capacity = meta->capacity; + disk->src->capacity = meta->capacity ? meta->capacity + : disk->src->physical;
We'll never get to this line because of the goto endjob (which gets propagated in next patch as goto cleanup).
Here's what I re-wrote this to:
if (format == VIR_STORAGE_FILE_RAW) src->capacity = src->physical; else if ((meta = virStorageFileGetMetadataFromBuf(disk->src->path, buf, len, format, NULL))) src->capacity = meta->capacity ? meta->capacity : src->physical; else goto endjob;
I didn't see an explicit ACK on this patch, but as 7/12 is the same material just refactored, I'll go ahead and push the corrected form of this at the same time as that one.
Coverity complained this morning because there's a call to virStorageFileGetMetadataFromBuf in the block just before this: (18) Event alloc_fn: Storage is returned from allocation function "virStorageFileGetMetadataFromBuf". [details] (19) Event var_assign: Assigning: "meta" = storage returned from "virStorageFileGetMetadataFromBuf(src->path, buf, len, format, NULL)". (20) Event cond_false: Condition "!(meta = virStorageFileGetMetadataFromBuf(src->path, buf, len, format, NULL))", taking false branch Also see events: [overwrite_var] 11119 if (!(meta = virStorageFileGetMetadataFromBuf(src->path, buf, len, 11120 format, NULL))) (21) Event if_end: End of if statement 11121 goto cleanup; (22) Event cond_false: Condition "format == VIR_STORAGE_FILE_RAW", taking false branch 11122 if (format == VIR_STORAGE_FILE_RAW) 11123 src->capacity = src->physical; (23) Event overwrite_var: Overwriting "meta" in "meta = virStorageFileGetMetadataFromBuf(src->path, buf, len, format, NULL)" leaks the storage that "meta" points to. Also see events: [alloc_fn][var_assign] 11124 else if ((meta = virStorageFileGetMetadataFromBuf(src->path, buf, 11125 len, format, NULL))) 11126 src->capacity = meta->capacity ? meta->capacity : src->physical; 11127 else 11128 goto cleanup; 11129 John