# New Ticket Created by Andy Dougherty
# Please include the string: [perl #38784]
# in the subject line of all future correspondence about this issue.
# <URL: https://rt.perl.org/rt3/Ticket/Display.html?id=38784 >
The following trivial patch prevents parrot from reading possibly
unallocated memory: If the C< char *name > were less than 10 characters
long, then the memcmp could read beyond the end of the allocated block;
the strncmp will properly terminate at the end of C<name>.
In most other places, this file uses a plain strcmp(). In these two
places, it used a memcmp(). I don't know why.
--- parrot-current/compilers/imcc/parser_util.c Wed Feb 22 11:15:12 2006
+++ parrot-andy/compilers/imcc/parser_util.c Wed Mar 22 12:36:53 2006
@@ -537,8 +537,8 @@
else if (!strcmp(name, "yield")) {
cur_unit->instructions->r[0]->pcc_sub->calls_a_sub |= 1 |ITPCCYIELD;
}
- else if (!memcmp(name, "invoke", 6) ||
- !memcmp(name, "callmethod", 10)) {
+ else if (!strncmp(name, "invoke", 6) ||
+ !strncmp(name, "callmethod", 10)) {
if (cur_unit->type & IMC_PCCSUB)
cur_unit->instructions->r[0]->pcc_sub->calls_a_sub |= 1;
}
--
Andy Dougherty [EMAIL PROTECTED]