Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Joel Brobecker <brobecker@adacore.com>
To: msnyder@sonic.net
Cc: gdb-patches@sourceware.org
Subject: Re: [PATCH] ada-lang, possible_user_operator_p, null pointer
Date: Tue, 14 Aug 2007 05:20:00 -0000	[thread overview]
Message-ID: <20070814052419.GE11498@adacore.com> (raw)
In-Reply-To: <20070814043053.GB11498@adacore.com>

> > 2007-08-11  Michael Snyder  <msnyder@access-company.com>
> > 
> > 	* ada-lang.c (possible_user_operator_p): Guard against NULL.
> 
> This is another case where I'd prefer to have the check for a NULL
> type moved to the top of the function. But I'm having a tough time
> determining how this might actually happen. So I'd like to sit on it
> for a little longer before we proceed.

I'm glad I sat on it :). I overlooked the fact that part of this function
is not limited to binary operators. I also handles unary operators, so
it would make sense that type1 might actually be NULL.

However, the expression evaluation should always make sure that
we have two operands before trying to evaluate it, so this should
never happen, right?

Unfortunately, digging deeper, I found elsewhere something that looks
suspicious to me, and it actually allowed me to build an example that
trigger a dereference of a NULL type1!!!

I am currently discussing all this with Paul Hilfinger, who wrote
most of this code, and I've suggested some other ways of rewriting
the code that I think will make it more consistent: In short, define
a separate function that matches arrays or pointer to arrays, with
a guard against null pointers, the same as numeric_type_p for instance,
and simplify the condition by using that function. We'd end up with
something like this:

    case BINOP_CONCAT:
      return !(array_type_p (type0) && array_type_p (type1));

We also need to address the bug that this check guards against!

In the meantime, I think it's fine to check in your patch.
We'll probably end up rewriting this part of the code, but
that won't actually change the actual logic, so....

> > Index: ada-lang.c
> > ===================================================================
> > RCS file: /cvs/src/src/gdb/ada-lang.c,v
> > retrieving revision 1.100
> > diff -p -r1.100 ada-lang.c
> > *** ada-lang.c	6 Aug 2007 20:07:44 -0000	1.100
> > --- ada-lang.c	11 Aug 2007 20:39:20 -0000
> > *************** possible_user_operator_p (enum exp_opcod
> > *** 3536,3542 ****
> >           ((TYPE_CODE (type0) != TYPE_CODE_ARRAY
> >             && (TYPE_CODE (type0) != TYPE_CODE_PTR
> >                 || TYPE_CODE (TYPE_TARGET_TYPE (type0)) != TYPE_CODE_ARRAY))
> > !          || (TYPE_CODE (type1) != TYPE_CODE_ARRAY
> >                && (TYPE_CODE (type1) != TYPE_CODE_PTR
> >                    || (TYPE_CODE (TYPE_TARGET_TYPE (type1)) 
> >   		     != TYPE_CODE_ARRAY))));
> > --- 3536,3542 ----
> >           ((TYPE_CODE (type0) != TYPE_CODE_ARRAY
> >             && (TYPE_CODE (type0) != TYPE_CODE_PTR
> >                 || TYPE_CODE (TYPE_TARGET_TYPE (type0)) != TYPE_CODE_ARRAY))
> > !          || (type1 != NULL && TYPE_CODE (type1) != TYPE_CODE_ARRAY
> >                && (TYPE_CODE (type1) != TYPE_CODE_PTR
> >                    || (TYPE_CODE (TYPE_TARGET_TYPE (type1)) 
> >   		     != TYPE_CODE_ARRAY))));

-- 
Joel


  reply	other threads:[~2007-08-14  5:20 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-08-11 20:43 msnyder
2007-08-14  4:27 ` Joel Brobecker
2007-08-14  5:20   ` Joel Brobecker [this message]
2007-08-14 18:33     ` msnyder
2007-08-15 18:39       ` [commit] ada-lang, possible_user_operator_p, null pointer (take 2) Joel Brobecker

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20070814052419.GE11498@adacore.com \
    --to=brobecker@adacore.com \
    --cc=gdb-patches@sourceware.org \
    --cc=msnyder@sonic.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox