coverity-model: write models fully for non-array allocation functions
Coverity seems to have issues figuring out the properties of g_malloc0 and other non *_n functions. While this was "fixed" by removing the custom second argument to __coverity_mark_as_afm_allocated__, inline the code from the array-based allocation functions to avoid future issues. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
0da41187df
commit
e17bdaab2b
@ -269,32 +269,77 @@ void *g_try_realloc_n(void *ptr, size_t nmemb, size_t size)
|
|||||||
|
|
||||||
void *g_malloc(size_t size)
|
void *g_malloc(size_t size)
|
||||||
{
|
{
|
||||||
return g_malloc_n(1, size);
|
void *ptr;
|
||||||
|
|
||||||
|
__coverity_negative_sink__(size);
|
||||||
|
ptr = __coverity_alloc__(size);
|
||||||
|
if (!ptr) {
|
||||||
|
__coverity_panic__();
|
||||||
|
}
|
||||||
|
__coverity_mark_as_uninitialized_buffer__(ptr);
|
||||||
|
__coverity_mark_as_afm_allocated__(ptr, AFM_free);
|
||||||
|
return ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void *g_malloc0(size_t size)
|
void *g_malloc0(size_t size)
|
||||||
{
|
{
|
||||||
return g_malloc0_n(1, size);
|
void *ptr;
|
||||||
|
|
||||||
|
__coverity_negative_sink__(size);
|
||||||
|
ptr = __coverity_alloc__(size);
|
||||||
|
if (!ptr) {
|
||||||
|
__coverity_panic__();
|
||||||
|
}
|
||||||
|
__coverity_writeall0__(ptr);
|
||||||
|
__coverity_mark_as_afm_allocated__(ptr, AFM_free);
|
||||||
|
return ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void *g_realloc(void *ptr, size_t size)
|
void *g_realloc(void *ptr, size_t size)
|
||||||
{
|
{
|
||||||
return g_realloc_n(ptr, 1, size);
|
__coverity_negative_sink__(size);
|
||||||
|
__coverity_escape__(ptr);
|
||||||
|
ptr = __coverity_alloc__(size);
|
||||||
|
if (!ptr) {
|
||||||
|
__coverity_panic__();
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* Memory beyond the old size isn't actually initialized. Can't
|
||||||
|
* model that. See Coverity's realloc() model
|
||||||
|
*/
|
||||||
|
__coverity_writeall__(ptr);
|
||||||
|
__coverity_mark_as_afm_allocated__(ptr, AFM_free);
|
||||||
|
return ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void *g_try_malloc(size_t size)
|
void *g_try_malloc(size_t size)
|
||||||
{
|
{
|
||||||
return g_try_malloc_n(1, size);
|
int nomem;
|
||||||
|
|
||||||
|
if (nomem) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
return g_malloc(size);
|
||||||
}
|
}
|
||||||
|
|
||||||
void *g_try_malloc0(size_t size)
|
void *g_try_malloc0(size_t size)
|
||||||
{
|
{
|
||||||
return g_try_malloc0_n(1, size);
|
int nomem;
|
||||||
|
|
||||||
|
if (nomem) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
return g_malloc0(size);
|
||||||
}
|
}
|
||||||
|
|
||||||
void *g_try_realloc(void *ptr, size_t size)
|
void *g_try_realloc(void *ptr, size_t size)
|
||||||
{
|
{
|
||||||
return g_try_realloc_n(ptr, 1, size);
|
int nomem;
|
||||||
|
|
||||||
|
if (nomem) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
return g_realloc(ptr, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Other glib functions */
|
/* Other glib functions */
|
||||||
|
Loading…
Reference in New Issue
Block a user