[ofa-general] Re: [PATCH] osm: improving error reporting function of the QoS parser

Yevgeny Kliteynik kliteyn at dev.mellanox.co.il
Sun Nov 18 13:06:09 PST 2007


Sasha Khapyorsky wrote:
> Hi Yevgeny,
> 
> On 14:07 Sun 18 Nov     , Yevgeny Kliteynik wrote:
>> [this patch replaces "handle first syntax error in policy file" patch]
>>
>> Improving error reporting function of the QoS parser:
>>  - Making it static
>>  - Printing error message to stderr as well as to the log
>>  - Function now can get formatted string as an argument
>>
>> Signed-off-by: Yevgeny Kliteynik <kliteyn at dev.mellanox.co.il>
>> ---
>>  opensm/opensm/osm_qos_parser.y |   22 +++++++++++++++++-----
>>  1 files changed, 17 insertions(+), 5 deletions(-)
>>
>> diff --git a/opensm/opensm/osm_qos_parser.y b/opensm/opensm/osm_qos_parser.y
>> index 4738831..bf560aa 100644
>> --- a/opensm/opensm/osm_qos_parser.y
>> +++ b/opensm/opensm/osm_qos_parser.y
>> @@ -47,6 +47,7 @@
>>
>>  #include <stdio.h>
>>  #include <assert.h>
>> +#include <stdarg.h>
>>  #include <stdlib.h>
>>  #include <string.h>
>>  #include <ctype.h>
>> @@ -125,8 +126,9 @@ static void __parser_add_map_to_port_map(
>>      cl_qmap_t * p_dmap,
>>      cl_map_t  * p_smap);
>>
>> +static void __qos_parser_error(const char *format, ...);
>> +
>>  extern char * __qos_parser_text;
>> -extern void __qos_parser_error (char *s);
>>  extern int __qos_parser_lex (void);
>>  extern FILE * __qos_parser_in;
>>  extern int errno;
>> @@ -1871,14 +1873,24 @@ int __qos_parser_wrap()
>>  /***************************************************
>>   ***************************************************/
>>
>> -void __qos_parser_error (char *s)
>> +static void __qos_parser_error(const char *format, ...)
>>  {
>> +    char s[9999];
> 
> What about to have smaller buffer (let's say 256) and to use vsnprintf()
> below to prevent overflow?

Having smaller buffer won't matter - this function is not used
as log function for errors, but as kind of "fatal" for QoS parser,
so allocating a string only when there is a syntax error in the
policy file doesn't look like an issue to me.
However, vsnprintf() is probably a good idea.

-- Yevgeny

> Sasha
> 
>> +    va_list pvar;
>> +
>>      OSM_LOG_ENTER(p_qos_parser_osm_log, __qos_parser_error);
>> +
>> +    va_start(pvar, format);
>> +    vsprintf(s, format, pvar);
>> +    va_end(pvar);
>> +
>>      osm_log(p_qos_parser_osm_log, OSM_LOG_ERROR,
>>              "__qos_parser_error: ERR AC05: "
>> -            "Syntax error (line %d:%d): %s. "
>> -            "Last text read: \"%s\"\n",
>> -            line_num, column_num, s, __parser_strip_white(__qos_parser_text));
>> +            "Syntax error (line %d:%d): %s",
>> +            line_num, column_num, s);
>> +    fprintf(stderr,
>> +            "Error in QoS Policy File (line %d:%d): %s.\n",
>> +            line_num, column_num, s);
>>      OSM_LOG_EXIT(p_qos_parser_osm_log);
>>  }
>>
>> -- 
>> 1.5.1.4
>>
>>
> 




More information about the general mailing list