Review Request: Resubmit: Fix to game of life applet to avoid accessing memory outside bounds of array.

the.goofeedude at gmail.com the.goofeedude at gmail.com
Mon Jun 21 16:52:36 CEST 2010


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
http://reviewboard.kde.org/r/4363/
-----------------------------------------------------------

(Updated 2010-06-21 14:52:36.388199)


Review request for Plasma.


Changes
-------

The resubmitted diff actually subtly changed the semantics of the game for cells which were on the right or left borders of the game. My initial idea that the odd loop bounds were to prevent odd behavior resulting from the (only actual) bug was incorrect. The loop bounds were meant to keep a border of 0'ed cells around the (active) game board. This allowed the calculation of neighbors to be very succinct.

With this updated patch, there would no longer be a padded border of 0's around the active game board. This should make the loop bounds simpler to read and understand, and will prevent the implicit display of an extra cell's width and height border around the game board. It does so at the cost of a succinct neighbors() function.

If it is better to stick with old approach, I would like to update the display code to avoid displaying the 0'ed border of the game board (any border around the game board will be explicit.)

At any rate, I believe the original bug should be fixed (displaying the state of memory one step outside of the cells array.) That fix is the smallest part of the current patch.
-Obby, 21 June 2010


Summary
-------

Note: This review request replaces former request http://reviewboard.kde.org/r/4361/ which was discarded after several attempts to upload an updated diff failed. I apologize for the extra mail. The original fix contained another bug which would cause a crash if the game board was not symmetrical.

This patch fixes an off-by-one error which led to accessing memory just outside of the cells array. It also kept the first character in the cells array from ever being displayed on the board properly, and a bunch of crazy math to keep the rules of the game intact. (The last cell displayed was reflecting the state of memory outside of the cells array.)


Diffs (updated)
-----

  /trunk/KDE/kdeplasma-addons/applets/life/life.h 1138875 
  /trunk/KDE/kdeplasma-addons/applets/life/life.cpp 1138875 

Diff: http://reviewboard.kde.org/r/4363/diff


Testing
-------

Testing Done:
Aside from the initial test cases which were used to confirm the bug (hard coding one char in the cells array to always be 1 and moving it around to find the bounds of the display,) I also generated a few other board states manually using examples found here:
http://en.wikipedia.org/wiki/Conway%27s_Game_of_Life

"Blinker" and "Toad" were two that were used to test.

Note: The bug in the original fix (diff in previous review request mentioned above) led to a crash when the gameboard was resized to be non-square. After fixing that bug, I tried several random board sizes, and they all worked.


Thanks,

obby

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.kde.org/pipermail/plasma-devel/attachments/20100621/e04abcf5/attachment.htm 


More information about the Plasma-devel mailing list