-
Notifications
You must be signed in to change notification settings - Fork 9
Open
Description
Issue description
Hi!
I found a bug at module insertion function in context menu.
Module can be inserted even if clicking non connector portion.
Context (Environment)
- version
What's the expected result?
- Can not insert block when click non connector portion
What's the actual result?
- Can insert block when click non connector portion
Steps to reproduce the issue
Note: This may not be happen depending on memory state.
Video:
https://www.youtube.com/watch?v=l8awqUfgwUA&ab_channel=TEMMIEHOIHOI
config.xml
<?xml version="1.0" standalone="no" ?>
<world gridSize="5,5,5">
<blockList blockSize="10,10,10">
<block position="1,1,1" color="255,140,0" orientation="3" />
</blockList>
</world>
Possible Solution
Set a value({0, 0, 0}) when clicking non connector portion to tabConnectorPositions.
In my view, the reason is that tabConnectorPositions doesn't have argument corresponding to non-connector spot.
This caused a buffer overrun, which resulted in an incorrect value for realPos.
Following is log of that time.
Thread 1 "myMotionTest" hit Breakpoint 1, Catoms3D::Catoms3DBlock::getNeighborPos (this=0xe15c8980, connectorID=56 '8', pos=...) at robots/catoms3D/catoms3DBlock.cpp:160
160 bool Catoms3DBlock::getNeighborPos(uint8_t connectorID, Cell3DPosition &pos) const {
(gdb) n
161 Vector3D realPos;
(gdb) n
163 Catoms3DWorld *wrl = getWorld();
(gdb) n
164 const Vector3D bs = wrl->lattice->gridScale;
(gdb) n
166 realPos.set(tabConnectorPositions[connectorID], 3, 1);
(gdb) p bs
$4 = {_pt = {10, 10, 10, 0}}
(gdb) n
167 realPos *= bs;
(gdb) p realPos
$5 = {_pt = {0.000748447317, 7.13885687e+31, 5.66773757e-08, 1}}
(gdb) n
168 realPos.set(3,1.0); // A vérifier
(gdb) p realPos
$6 = {_pt = {0.00748447329, 7.13885668e+32, 5.66773735e-07, 0}}
(gdb) n
169 realPos = ((Catoms3DGlBlock *) ptrGlBlock)->mat * realPos;
(gdb) p realPos
$7 = {_pt = {0.00748447329, 7.13885668e+32, 5.66773735e-07, 1}}
(gdb) n
170 if (realPos[2] < 0) return false;
(gdb) p realPos
$8 = {_pt = {3.56942795e+32, 3.56942795e+32, -5.04793378e+32, 1}}
Metadata
Metadata
Assignees
Labels
No labels