VisibleSim icon indicating copy to clipboard operation
VisibleSim copied to clipboard

[BUG] Illegal module insertion occurred

Open kazogihara opened this issue 3 years ago • 2 comments

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
    • 727ea58a

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}}

kazogihara avatar Sep 03 '22 18:09 kazogihara

@docben Hi! I created pull request to fix this issue. So could you check it?

kazogihara avatar Oct 27 '22 07:10 kazogihara

Thank you very much for your help !

docben avatar Mar 23 '23 11:03 docben