mirror of
https://github.com/varun-r-mallya/sysprof.git
synced 2026-02-09 22:50:54 +00:00
libsysprof: protect against bad reads
This commit is contained in:
@ -232,7 +232,7 @@ sysprof_symbol_map_add_resolver (SysprofSymbolMap *self,
|
|||||||
g_ptr_array_add (self->resolvers, g_object_ref (resolver));
|
g_ptr_array_add (self->resolvers, g_object_ref (resolver));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static gboolean
|
||||||
sysprof_symbol_map_do_alloc (SysprofSymbolMap *self,
|
sysprof_symbol_map_do_alloc (SysprofSymbolMap *self,
|
||||||
SysprofCaptureReader *reader,
|
SysprofCaptureReader *reader,
|
||||||
GHashTable *seen)
|
GHashTable *seen)
|
||||||
@ -244,7 +244,7 @@ sysprof_symbol_map_do_alloc (SysprofSymbolMap *self,
|
|||||||
g_assert (seen != NULL);
|
g_assert (seen != NULL);
|
||||||
|
|
||||||
if (!(ev = sysprof_capture_reader_read_allocation (reader)))
|
if (!(ev = sysprof_capture_reader_read_allocation (reader)))
|
||||||
return;
|
return FALSE;
|
||||||
|
|
||||||
for (guint i = 0; i < ev->n_addrs; i++)
|
for (guint i = 0; i < ev->n_addrs; i++)
|
||||||
{
|
{
|
||||||
@ -283,9 +283,11 @@ sysprof_symbol_map_do_alloc (SysprofSymbolMap *self,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static gboolean
|
||||||
sysprof_symbol_map_do_sample (SysprofSymbolMap *self,
|
sysprof_symbol_map_do_sample (SysprofSymbolMap *self,
|
||||||
SysprofCaptureReader *reader,
|
SysprofCaptureReader *reader,
|
||||||
GHashTable *seen)
|
GHashTable *seen)
|
||||||
@ -298,7 +300,7 @@ sysprof_symbol_map_do_sample (SysprofSymbolMap *self,
|
|||||||
g_assert (seen != NULL);
|
g_assert (seen != NULL);
|
||||||
|
|
||||||
if (!(sample = sysprof_capture_reader_read_sample (reader)))
|
if (!(sample = sysprof_capture_reader_read_sample (reader)))
|
||||||
return;
|
return FALSE;
|
||||||
|
|
||||||
for (guint i = 0; i < sample->n_addrs; i++)
|
for (guint i = 0; i < sample->n_addrs; i++)
|
||||||
{
|
{
|
||||||
@ -344,6 +346,8 @@ sysprof_symbol_map_do_sample (SysprofSymbolMap *self,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -373,12 +377,14 @@ sysprof_symbol_map_resolve (SysprofSymbolMap *self,
|
|||||||
{
|
{
|
||||||
if (type == SYSPROF_CAPTURE_FRAME_SAMPLE)
|
if (type == SYSPROF_CAPTURE_FRAME_SAMPLE)
|
||||||
{
|
{
|
||||||
sysprof_symbol_map_do_sample (self, reader, seen);
|
if (!sysprof_symbol_map_do_sample (self, reader, seen))
|
||||||
|
break;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
else if (type == SYSPROF_CAPTURE_FRAME_ALLOCATION)
|
else if (type == SYSPROF_CAPTURE_FRAME_ALLOCATION)
|
||||||
{
|
{
|
||||||
sysprof_symbol_map_do_alloc (self, reader, seen);
|
if (!sysprof_symbol_map_do_alloc (self, reader, seen))
|
||||||
|
break;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user