Closed Bug 1361229 Opened 7 years ago Closed 7 years ago

Add comments and assertions to clarify correctness of iterator value (Coverity complains about smallerItr possibly being out of bounds but this is not true)

Categories

(Core :: Layout, enhancement)

enhancement
Not set
normal

Tracking

()

RESOLVED FIXED
mozilla55
Tracking Status
firefox55 --- fixed

People

(Reporter: neerja, Assigned: neerja)

References

Details

Attachments

(1 file)

      No description provided.
Blocks: 1345352
Assignee: nobody → npancholi
Summary: Adding comment and assertion to clarify correctness of itr value (Coverity complains about smallerItr possibly being out of bounds but this is not true) → Add comments and assertions to clarify correctness of iterator value (Coverity complains about smallerItr possibly being out of bounds but this is not true)
Attachment #8863859 - Flags: review?(dholbert)
Asking dbaron for review for this since he reviewed the original patch for Bug 1285874
Comment on attachment 8863859 [details]
Bug 1361229 - Add explanatory comments and assertion to nsTableFrame to ensure that the value of both smallerIter and aDeletedRowStoredIndex remains valid.

https://reviewboard.mozilla.org/r/135594/#review139372

r=dbaron with the following changes

::: layout/tables/nsTableFrame.cpp:997
(Diff revision 3)
> +  // smallerIter can never be out of bounds because of this check and the fact
> +  // that our range map can never be empty as we check for size above.

So understanding this comment requires understanding that upper_bound() might return end(), which is out-of-bounds.

So maybe restate this as:
// While greaterIter might be out-of-bounds (by being equal to end()), smallerIter now cannot be, since we returned early above for a 0-size map.

and move it to right after the smallerIter-- so the "now" makes sense.

::: layout/tables/nsTableFrame.cpp:1003
(Diff revision 3)
> +  // Checks to ensure that aDeletedRowIndexRanges does not already contain
> +  // aDeletedRowStoredIndex. That would mean we are trying to delete an already
> +  // deleted row.

Remove this comment; it says the same thing the assertion text does.  (Or, if you want, move the parts that aren't in the assertion text already into it.)

::: layout/tables/nsTableFrame.cpp:1006
(Diff revision 3)
> +  if (greaterIter == mDeletedRowIndexRanges.end() || smallerIter != greaterIter) {
> +    // Note: smallerIter can only be equal to greaterIter when both
> +    // of them point to the beginning of the map and in that case smallerIter
> +    // does not "exist" but we clip smallerIter to point to beginning of map
> +    // so that it doesn't point to something unknown or outside the map boundry.
> +
> +    // Note: When greaterIter is not the end (i.e. it "exists") upper_bound()
> +    // ensures aDeletedRowStoredIndex < greaterIter->first so no need to
> +    // assert that.
> +    MOZ_ASSERT(aDeletedRowStoredIndex > smallerIter->second, "Trying to delete "
> +               "an already deleted row?");
> +  }

A few comments here:

I don't see why the "greaterIter == mDeletedRowIndexRanges.end() ||" is needed.  If greaterIter is end(), then smallerIter != greaterIter, so you should be able to check only the latter condition.

Second, it's better to put the conditions inside the assertion so they don't run in non-DEBUG builds.  That is, instead of having a MOZ_ASSERT inside an if, just:

MOZ_ASSERT(smallerIter == greaterIter ||
           aDeletedRowStoredIndex > smallerIter->second,
           "...");
Attachment #8863859 - Flags: review?(dbaron) → review+
Keywords: checkin-needed
Pushed by ryanvm@gmail.com:
https://hg.mozilla.org/integration/autoland/rev/a208e1be3910
Add explanatory comments and assertion to nsTableFrame to ensure that the value of both smallerIter and aDeletedRowStoredIndex remains valid. r=dbaron
Keywords: checkin-needed
https://hg.mozilla.org/mozilla-central/rev/a208e1be3910
Status: NEW → RESOLVED
Closed: 7 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla55
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: