From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-io1-xd2d.google.com (mail-io1-xd2d.google.com [IPv6:2607:f8b0:4864:20::d2d]) by sourceware.org (Postfix) with ESMTPS id C66B7385800F for ; Mon, 18 Oct 2021 19:35:29 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org C66B7385800F Received: by mail-io1-xd2d.google.com with SMTP id e144so17653962iof.3 for ; Mon, 18 Oct 2021 12:35:29 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=HD0Av4xKsf1JigBsOvE73mLs9voUGFf48yCRhp2RyZ8=; b=Xr8aoz0BtFUqJ3mVyteA2QYAkYE1ZyI6LigaH8tYE6UtknAsfvackYj4KldIu79+58 r4NkLHV6dkNuLgWAQYQLq7+GhBIHWpwVyLFPBhuFxCVSVPamETkQk56In3O3kGYrE6eD kXEB9yWIhJDl1Nf97A7lstbyK46rAdhBdewdt4Haoy9Q0L8mgLogLyKMKBlioFoMB2SU EZGM/cTgwSiITWsGE4PcEiPbHJaj/gT+p/cIhYFmjbnoQUPrOLpOMh8s/XlZCOfEuZjB dywztYnh+LsS19Y/zCK/HJnxzx/xHuoABaz2FE8yvypnIDSk6q9jgE0Tsv6MwhdZUtKr uUWQ== X-Gm-Message-State: AOAM531uklMLk312BoNzZFpCQxGpr2Nxi0iRTErLTOp4YCYLbwC38OUb ib1ekLoiYaPlxAzmROmaABdx5zXhwrACQw== X-Google-Smtp-Source: ABdhPJyrK1+3FlrUi/u54t6U/+nmvLru0t5FmzwlTWPu5LG6ym7r89VSx9Xpjc7m/rUoWbgBUsctxA== X-Received: by 2002:a05:6638:293:: with SMTP id c19mr1207402jaq.21.1634585729252; Mon, 18 Oct 2021 12:35:29 -0700 (PDT) Received: from murgatroyd.Home (174-16-0-219.hlrn.qwest.net. [174.16.0.219]) by smtp.gmail.com with ESMTPSA id o10sm7270057ilt.84.2021.10.18.12.35.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Oct 2021 12:35:28 -0700 (PDT) From: Tom Tromey To: gdb-patches@sourceware.org Cc: Tom Tromey Subject: [PATCH] Check index in type::field Date: Mon, 18 Oct 2021 13:35:26 -0600 Message-Id: <20211018193526.175222-1-tromey@adacore.com> X-Mailer: git-send-email 2.31.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-11.9 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 18 Oct 2021 19:35:31 -0000 This changes gdb to check the index that is passed to type::field. This caught one bug in the Ada code when running the test suite (actually I found the bug first, then realized that the check would have helped), so this patch fixes that as well. Regression tested on x86-64 Fedora 34. --- gdb/ada-lang.c | 2 +- gdb/gdbtypes.c | 2 +- gdb/gdbtypes.h | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c index 98718bcc98b..935358d0245 100644 --- a/gdb/ada-lang.c +++ b/gdb/ada-lang.c @@ -7539,7 +7539,7 @@ ada_template_to_fixed_record_type_1 (struct type *type, that follow this one. */ if (ada_is_aligner_type (field_type)) { - long field_offset = TYPE_FIELD_BITPOS (field_type, f); + long field_offset = TYPE_FIELD_BITPOS (type, f); field_valaddr = cond_offset_host (field_valaddr, field_offset); field_address = cond_offset_target (field_address, field_offset); diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c index de73a2b5608..2691fabc337 100644 --- a/gdb/gdbtypes.c +++ b/gdb/gdbtypes.c @@ -5841,11 +5841,11 @@ append_flags_type_field (struct type *type, int start_bitpos, int nr_bits, gdb_assert (nr_bits >= 1 && (start_bitpos + nr_bits) <= type_bitsize); gdb_assert (name != NULL); + type->set_num_fields (type->num_fields () + 1); type->field (field_nr).set_name (xstrdup (name)); type->field (field_nr).set_type (field_type); type->field (field_nr).set_loc_bitpos (start_bitpos); TYPE_FIELD_BITSIZE (type, field_nr) = nr_bits; - type->set_num_fields (type->num_fields () + 1); } /* Special version of append_flags_type_field to add a flag field. diff --git a/gdb/gdbtypes.h b/gdb/gdbtypes.h index dc575c42996..4324641eb0d 100644 --- a/gdb/gdbtypes.h +++ b/gdb/gdbtypes.h @@ -1047,6 +1047,7 @@ struct type /* Get the field at index IDX. */ struct field &field (int idx) const { + gdb_assert (idx >= 0 && idx < num_fields ()); return this->fields ()[idx]; } -- 2.31.1