goto out_munmap;
                }
 
-               perf_event__parse_sample(event, attr.sample_type, sample_size,
-                                        false, &sample);
+               err = perf_event__parse_sample(event, attr.sample_type, sample_size,
+                                              false, &sample);
+               if (err) {
+                       pr_err("Can't parse sample, err = %d\n", err);
+                       goto out_munmap;
+               }
+
                evsel = perf_evlist__id2evsel(evlist, sample.id);
                if (evsel == NULL) {
                        pr_debug("event with id %" PRIu64
 
 {
        struct perf_sample sample;
        union perf_event *event;
+       int ret;
 
        while ((event = perf_evlist__read_on_cpu(top.evlist, cpu)) != NULL) {
-               perf_session__parse_sample(self, event, &sample);
+               ret = perf_session__parse_sample(self, event, &sample);
+               if (ret) {
+                       pr_err("Can't parse sample, err = %d\n", ret);
+                       continue;
+               }
 
                if (event->header.type == PERF_RECORD_SAMPLE)
                        perf_event__process_sample(event, &sample, self);
 
        union perf_event *event;
        int sample_id_all = 1, cpu;
        static char *kwlist[] = {"sample_id_all", NULL, NULL};
+       int err;
 
        if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i|i", kwlist,
                                         &cpu, &sample_id_all))
                        return PyErr_NoMemory();
 
                first = list_entry(evlist->entries.next, struct perf_evsel, node);
-               perf_event__parse_sample(event, first->attr.sample_type,
-                                        perf_sample_size(first->attr.sample_type),
-                                        sample_id_all, &pevent->sample);
+               err = perf_event__parse_sample(event, first->attr.sample_type,
+                                              perf_sample_size(first->attr.sample_type),
+                                              sample_id_all, &pevent->sample);
+               if (err) {
+                       pr_err("Can't parse sample, err = %d\n", err);
+                       goto end;
+               }
+
                return pyevent;
        }
-
+end:
        Py_INCREF(Py_None);
        return Py_None;
 }
 
        struct perf_sample sample;
        u64 limit = os->next_flush;
        u64 last_ts = os->last_sample ? os->last_sample->timestamp : 0ULL;
+       int ret;
 
        if (!ops->ordered_samples || !limit)
                return;
                if (iter->timestamp > limit)
                        break;
 
-               perf_session__parse_sample(s, iter->event, &sample);
-               perf_session_deliver_event(s, iter->event, &sample, ops,
-                                          iter->file_offset);
+               ret = perf_session__parse_sample(s, iter->event, &sample);
+               if (ret)
+                       pr_err("Can't parse sample, err = %d\n", ret);
+               else
+                       perf_session_deliver_event(s, iter->event, &sample, ops,
+                                                  iter->file_offset);
 
                os->last_flush = iter->timestamp;
                list_del(&iter->list);
        /*
         * For all kernel events we get the sample data
         */
-       perf_session__parse_sample(session, event, &sample);
+       ret = perf_session__parse_sample(session, event, &sample);
+       if (ret)
+               return ret;
 
        /* Preprocess sample records - precheck callchains */
        if (perf_session__preprocess_sample(session, event, &sample))