On Tue, 7 Jan 2025 11:04:57 +0000
Shiju Jose <[email protected]> wrote:

> Please find attached format file, which might have failed to parse because of 
> the
> unsupported formats in the libtraceevent you mentioned in the following 
> thread.
> https://lore.kernel.org/lkml/[email protected]/#t    
> 
> Please find the improvement in the libraceevent which I mentioned for not 
> returning error
> when parsing failed,
> ===========================================
> diff --git a/src/event-parse.c b/src/event-parse.c index 0427061..b9264cb 
> 100644
> --- a/src/event-parse.c
> +++ b/src/event-parse.c
> @@ -7905,9 +7905,14 @@ __parse_event(struct tep_handle *tep,
>               const char *buf, unsigned long size,
>               const char *sys)
>  {
> -       int ret = parse_format(eventp, tep, buf, size, sys);
> -       struct tep_event *event = *eventp;
> +       int ret;
> +       struct tep_event *event;
> +
> +       ret = parse_format(eventp, tep, buf, size, sys);
> +       if (ret)
> +               return ret;
>  
> +       event = *eventp;
>         if (event == NULL)
>                 return ret; 

Actually, this is the proper patch:

diff --git a/src/event-parse.c b/src/event-parse.c
index 33ed7fb47fff..f2e50b0e8992 100644
--- a/src/event-parse.c
+++ b/src/event-parse.c
@@ -7841,7 +7841,7 @@ static enum tep_errno parse_format(struct tep_event 
**eventp,
        ret = event_read_format(event);
        if (ret < 0) {
                ret = TEP_ERRNO__READ_FORMAT_FAILED;
-               goto event_parse_failed;
+               goto event_alloc_failed;
        }
 
        /*


As it's OK if it returns that it failed to parse the print format, as it
can still read the event. But if it fails to read the fields, then it is
basically useless.

-- Steve

Reply via email to