# New Ticket Created by Ron Blaschke
# Please include the string: [perl #43529]
# in the subject line of all future correspondence about this issue.
# <URL: http://rt.perl.org/rt3/Ticket/Display.html?id=43529 >
Adds some range check assertions to F<compilers/imcc/sets.c>. Please
double check if I got them right!
Assuming the assertions are good there seems to be a problem with its
use, at least for Parrot r19565, Win32, VC++ 8.0. I don't think it's
platform dependent, though.
...
.\parrot.exe -o runtime\parrot\library\String\Utils.pbc
runtime\parrot\library\String\Utils.pir
.\parrot.exe -o runtime\parrot\library\YAML\Parser\Syck.pbc
runtime\parrot\library\YAML\Parser\Syck.pir
.\parrot.exe -o runtime\parrot\library\STM.pbc
runtime\parrot\library\STM.pir
Assertion failed: element >= 0 && element < s->length, file
compilers\imcc\sets.c, line 108
Changed Files:
compilers/imcc/sets.c
Ron
Index: compilers/imcc/sets.c
===================================================================
--- compilers/imcc/sets.c (revision 19565)
+++ compilers/imcc/sets.c (working copy)
@@ -86,6 +86,7 @@
void
set_add(Set *s /*NN*/, int element)
{
+ assert(element >= 0 && element < s->length);
s->bmp[element >> 3] |= (1 << (element & 7));
}
@@ -104,6 +105,7 @@
set_contains(const Set *s /*NN*/, int element)
/* WARN_UNUSED */
{
+ assert(element >= 0 && element < s->length);
#ifdef __LCC__
/* workaround for another lcc bug.. */
const int tmp = (1 << (element & 7));