2010-05-05 09:58 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)

* harbour/src/compiler/gencc.c
    ! fixed possible HVM stack corruption by dummy (alias->field) code
      which does not store the result. The problem was exploited by
      code generated for -gc3 mode only. Here is self contain example:
            proc main()
            begin sequence with {||break()}
               p()
            end sequence
            proc p()
               (test->name)
               (test->name)
            return
This commit is contained in:
Przemyslaw Czerpak
2010-05-05 07:58:32 +00:00
parent 2f5d29aff5
commit 0c0fd9a15e
2 changed files with 22 additions and 8 deletions

View File

@@ -17,6 +17,20 @@
past entries belonging to author(s): Viktor Szakats.
*/
2010-05-05 09:58 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/src/compiler/gencc.c
! fixed possible HVM stack corruption by dummy (alias->field) code
which does not store the result. The problem was exploited by
code generated for -gc3 mode only. Here is self contain example:
proc main()
begin sequence with {||break()}
p()
end sequence
proc p()
(test->name)
(test->name)
return
2010-05-05 08:02 UTC+0200 Viktor Szakats (harbour.01 syenar.hu)
* src/rtl/achoice.prg
! Added patch by Jerry Finuliar to fine tune cursor

View File

@@ -1411,25 +1411,25 @@ static HB_GENC_FUNC( hb_p_pushsym )
return 4;
case HB_P_PUSHALIASEDFIELDNEAR:
fprintf( cargo->yyc,
"\thb_xvmPushAliasedFieldExt( symbols + %u, symbols + %u );\n",
"\tif( hb_xvmPushAliasedFieldExt( symbols + %u, symbols + %u ) ) break;\n",
HB_PCODE_MKUSHORT( &pFunc->pCode[ lPCodePos + 1 ] ),
pFunc->pCode[ lPCodePos + 4 ] );
return 5;
case HB_P_PUSHALIASEDFIELD:
fprintf( cargo->yyc,
"\thb_xvmPushAliasedFieldExt( symbols + %u, symbols + %u );\n",
"\tif( hb_xvmPushAliasedFieldExt( symbols + %u, symbols + %u ) ) break;\n",
HB_PCODE_MKUSHORT( &pFunc->pCode[ lPCodePos + 1 ] ),
HB_PCODE_MKUSHORT( &pFunc->pCode[ lPCodePos + 4 ] ) );
return 6;
case HB_P_POPALIASEDFIELDNEAR:
fprintf( cargo->yyc,
"\thb_xvmPopAliasedFieldExt( symbols + %u, symbols + %u );\n",
"\tif( hb_xvmPopAliasedFieldExt( symbols + %u, symbols + %u ) ) break;\n",
HB_PCODE_MKUSHORT( &pFunc->pCode[ lPCodePos + 1 ] ),
pFunc->pCode[ lPCodePos + 4 ] );
return 5;
case HB_P_POPALIASEDFIELD:
fprintf( cargo->yyc,
"\thb_xvmPopAliasedFieldExt( symbols + %u, symbols + %u );\n",
"\tif( hb_xvmPopAliasedFieldExt( symbols + %u, symbols + %u ) ) break;\n",
HB_PCODE_MKUSHORT( &pFunc->pCode[ lPCodePos + 1 ] ),
HB_PCODE_MKUSHORT( &pFunc->pCode[ lPCodePos + 4 ] ) );
return 6;
@@ -1455,25 +1455,25 @@ static HB_GENC_FUNC( hb_p_pushsymnear )
return 3;
case HB_P_PUSHALIASEDFIELDNEAR:
fprintf( cargo->yyc,
"\thb_xvmPushAliasedFieldExt( symbols + %u, symbols + %u );\n",
"\tif( hb_xvmPushAliasedFieldExt( symbols + %u, symbols + %u ) ) break;\n",
pFunc->pCode[ lPCodePos + 1 ],
pFunc->pCode[ lPCodePos + 3 ] );
return 4;
case HB_P_PUSHALIASEDFIELD:
fprintf( cargo->yyc,
"\thb_xvmPushAliasedFieldExt( symbols + %u, symbols + %u );\n",
"\tif( hb_xvmPushAliasedFieldExt( symbols + %u, symbols + %u ) ) break;\n",
pFunc->pCode[ lPCodePos + 1 ],
HB_PCODE_MKUSHORT( &pFunc->pCode[ lPCodePos + 3 ] ) );
return 5;
case HB_P_POPALIASEDFIELDNEAR:
fprintf( cargo->yyc,
"\thb_xvmPopAliasedFieldExt( symbols + %u, symbols + %u );\n",
"\tif( hb_xvmPopAliasedFieldExt( symbols + %u, symbols + %u ) ) break;\n",
pFunc->pCode[ lPCodePos + 1 ],
pFunc->pCode[ lPCodePos + 3 ] );
return 4;
case HB_P_POPALIASEDFIELD:
fprintf( cargo->yyc,
"\thb_xvmPopAliasedFieldExt( symbols + %u, symbols + %u );\n",
"\tif( hb_xvmPopAliasedFieldExt( symbols + %u, symbols + %u ) ) break;\n",
pFunc->pCode[ lPCodePos + 1 ],
HB_PCODE_MKUSHORT( &pFunc->pCode[ lPCodePos + 3 ] ) );
return 5;