X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=pp.c;h=6809b3176edbdfc43bb6535d1dbe68727ab2443b;hb=b2a156bd8e464af88881c77344280160fd844dcf;hp=78f7adfe5700e0b8b3837fe856508fc9c2b980dd;hpb=78c72037c327e2cd8ede6cf098324435a670ca67;p=p5sagit%2Fp5-mst-13.2.git diff --git a/pp.c b/pp.c index 78f7adf..6809b31 100644 --- a/pp.c +++ b/pp.c @@ -389,7 +389,7 @@ PP(pp_prototype) if (SvPOK(TOPs) && SvCUR(TOPs) >= 7) { const char * const s = SvPVX_const(TOPs); if (strnEQ(s, "CORE::", 6)) { - const int code = keyword(s + 6, SvCUR(TOPs) - 6); + const int code = keyword(s + 6, SvCUR(TOPs) - 6, 1); if (code < 0) { /* Overridable. */ #define MAX_ARGS_OP ((sizeof(I32) - 1) * 2) int i = 0, n = 0, seen_question = 0; @@ -397,7 +397,7 @@ PP(pp_prototype) char str[ MAX_ARGS_OP * 2 + 2 ]; /* One ';', one '\0' */ if (code == -KEY_chop || code == -KEY_chomp - || code == -KEY_exec || code == -KEY_system) + || code == -KEY_exec || code == -KEY_system || code == -KEY_err) goto set; while (i < MAXO) { /* The slow way. */ if (strEQ(s + 6, PL_op_name[i]) @@ -644,7 +644,7 @@ PP(pp_study) } s = (unsigned char*)(SvPV(sv, len)); pos = len; - if (pos <= 0 || !SvPOK(sv)) { + if (pos <= 0 || !SvPOK(sv) || SvUTF8(sv)) { /* No point in studying a zero length string, and not safe to study anything that doesn't appear to be a simple scalar (and hence might change between now and when the regexp engine runs without our set @@ -4035,7 +4035,7 @@ PP(pp_hslice) STRLEN keylen; const char * const key = SvPV_const(keysv, keylen); SAVEDELETE(hv, savepvn(key,keylen), - SvUTF8(keysv) ? -(I32)keylen : keylen); + SvUTF8(keysv) ? -(I32)keylen : (I32)keylen); } } }