On 13/06/2012 3:23 AM, Kelly O'Hair wrote:

Ok, I have to confess, I had to look at this hprof table logic more.

This generic "table" is used all over the place in hprof, so I had to dust off 
some brain cells.
The info structures are extra structures or extra "info" for each table 
element, and it's perfectly
valid for the info structure size to be 0. In particular, string tables have 
info_size==0.
But when dealing with those info_size==0 tables, the info data is never asked 
for or accessed,
if it was hprof would be seriously broken with null pointer accesses all over 
the place.
So I am not convinced we are fixing any kind of bug here, just shutting up a 
static analysis
tool that can't follow the non-obvious code flows.

Parfait is seeing a NULL pointer returned here, and assumes that all calls to 
get_info could
return a NULL pointer, that is in fact wrong, because if info_size==0, this 
call will never be made.
Parfait doesn't know that. Not unexpected. And even without this check, if 
info_size==0, it
will return a NULL pointer anyway.

So I have changed my fix.

The static function get_info() in hprof_table.c is only called twice in that 
file, once by the
extern function table_get_info(), and once by a table walker.
I have removed the "return NULL;" from get_info() and made the checks where it 
is called instead.
I think this will remove the Parfait errors, but may generate some new ones, so 
we could be playing
a bit of a whack-a-mole game here.

I like this better, but I don't see any check in table_get_info(), other than the assertion.

David
-----


New webrev was generated and I displaced the old one:
    http://cr.openjdk.java.net/~ohair/openjdk8/parfait_hprof_fixes/webrev/

Generic data structures where a pointer can be NULL sometimes and not-NULL 
other times
is not something Parfait (or perhaps any static analysis tool) can deal with 
very well.

-kto

On Jun 12, 2012, at 8:06 AM, Kelly Ohair wrote:

if size is zero  it returns null
thats the cascading error that parfait is finding
asserts turn into nothing with product builds so i need a dead stop here to 
shut up parfait :(


Sent from my iPhone

On Jun 11, 2012, at 22:56, David Holmes<david.hol...@oracle.com>  wrote:

On 12/06/2012 12:48 PM, Kelly O'Hair wrote:

Need reviewer.

I was asked to look at some Parfait errors in hprof code:

7176138: Fixes for missing close() calls and possible null pointer reference 
instead of fatal error
http://cr.openjdk.java.net/~ohair/openjdk8/parfait_hprof_fixes/webrev/


hprof_table.c

211     if ( ltable->info_size == 0 ) {
212         HPROF_ERROR(JNI_TRUE, "Table is empty and should never be.");
213         return NULL;

It is not obvious this should be a fatal error. Elsewhere this is handled as an 
assert.

David

Reply via email to