New warning with gcc 7.1

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

New warning with gcc 7.1

Christophe JAILLET
Hi,

when compiling with gcc 7.1, we have the following warning (in French):

util_expr_eval.c: Dans la fonction « ap_expr_eval_re_backref »:
util_expr_eval.c:199:63: warning: comparaison entre un pointeur et la
constante caractère zéro [-Wpointer-compare]
      if (!ctx->re_pmatch || !ctx->re_source || *ctx->re_source == '\0' ||
                                                                ^~
util_expr_eval.c:199:47: note: vouliez-vous déréférencer le pointeur ?
      if (!ctx->re_pmatch || !ctx->re_source || *ctx->re_source == '\0' ||
                                                ^

(i.e. comparison between a pointer and 0)


Knowing that we have:

typedef struct {
     ...
     /** the string corresponding to the re_pmatch */
     const char **re_source;
     ...
} ap_expr_eval_ctx_t;


Should the test in 'ap_expr_eval_re_backref' be something like:

     if (!ctx->re_pmatch || !ctx->re_source || !*ctx->re_source ||
         **ctx->re_source == '\0' || ctx->re_nmatch < n + 1)


Best regards,

CJ


Reply | Threaded
Open this post in threaded view
|

Re: New warning with gcc 7.1

Ruediger Pluem


On 05/26/2017 11:29 AM, Christophe JAILLET wrote:

> Hi,
>
> when compiling with gcc 7.1, we have the following warning (in French):
>
> util_expr_eval.c: Dans la fonction « ap_expr_eval_re_backref »:
> util_expr_eval.c:199:63: warning: comparaison entre un pointeur et la constante caractère zéro [-Wpointer-compare]
>      if (!ctx->re_pmatch || !ctx->re_source || *ctx->re_source == '\0' ||
>                                                                ^~
> util_expr_eval.c:199:47: note: vouliez-vous déréférencer le pointeur ?
>      if (!ctx->re_pmatch || !ctx->re_source || *ctx->re_source == '\0' ||
>                                                ^
>
> (i.e. comparison between a pointer and 0)
>
>
> Knowing that we have:
>
> typedef struct {
>     ...
>     /** the string corresponding to the re_pmatch */
>     const char **re_source;
>     ...
> } ap_expr_eval_ctx_t;
>
>
> Should the test in 'ap_expr_eval_re_backref' be something like:
>
>     if (!ctx->re_pmatch || !ctx->re_source || !*ctx->re_source ||
>         **ctx->re_source == '\0' || ctx->re_nmatch < n + 1)

Looks sane to me as from a brief view it looks sane to me to assume that ctx->re_source is always != NULL at least if
ctx->re_pmatch != 0

Regards

Rüdiger