dcb3b7
From af04cb4d2503c5c75d2229e232b8a0bd5c210084 Mon Sep 17 00:00:00 2001
dcb3b7
From: Yves Orton <demerphq@gmail.com>
dcb3b7
Date: Tue, 13 Sep 2016 23:06:07 +0200
dcb3b7
Subject: [PATCH] clean up gv_fetchmethod_pvn_flags: introduce name_end
dcb3b7
MIME-Version: 1.0
dcb3b7
Content-Type: text/plain; charset=UTF-8
dcb3b7
Content-Transfer-Encoding: 8bit
dcb3b7
dcb3b7
Ported to 5.24.0:
dcb3b7
dcb3b7
commit 65308f87d02a1900e59f0002fa94c855d4d4c5df
dcb3b7
Author: Yves Orton <demerphq@gmail.com>
dcb3b7
Date:   Tue Sep 13 23:06:07 2016 +0200
dcb3b7
dcb3b7
    clean up gv_fetchmethod_pvn_flags: introduce name_end
dcb3b7
dcb3b7
    nend is used for too many things, this replaces various
dcb3b7
    uses of nend with name_end, which is constant.
dcb3b7
dcb3b7
    this is a first step to fixing [perl #129267], which shouldnt
dcb3b7
    change any behavior
dcb3b7
dcb3b7
Signed-off-by: Petr Písař <ppisar@redhat.com>
dcb3b7
---
dcb3b7
 gv.c | 14 ++++++++------
dcb3b7
 1 file changed, 8 insertions(+), 6 deletions(-)
dcb3b7
dcb3b7
diff --git a/gv.c b/gv.c
dcb3b7
index 28396de..d738bf0 100644
dcb3b7
--- a/gv.c
dcb3b7
+++ b/gv.c
dcb3b7
@@ -1014,6 +1014,8 @@ Perl_gv_fetchmethod_pv_flags(pTHX_ HV *stash, const char *name, U32 flags)
dcb3b7
 GV *
dcb3b7
 Perl_gv_fetchmethod_pvn_flags(pTHX_ HV *stash, const char *name, const STRLEN len, U32 flags)
dcb3b7
 {
dcb3b7
+    const char * const origname = name;
dcb3b7
+    const char * const name_end = name + len;
dcb3b7
     const char *nend;
dcb3b7
     const char *nsplit = NULL;
dcb3b7
     GV* gv;
dcb3b7
@@ -1034,7 +1036,7 @@ Perl_gv_fetchmethod_pvn_flags(pTHX_ HV *stash, const char *name, const STRLEN le
dcb3b7
 	   the error reporting code.  */
dcb3b7
     }
dcb3b7
 
dcb3b7
-    for (nend = name; *nend || nend != (origname + len); nend++) {
dcb3b7
+    for (nend = name; *nend || nend != name_end; nend++) {
dcb3b7
 	if (*nend == '\'') {
dcb3b7
 	    nsplit = nend;
dcb3b7
 	    name = nend + 1;
dcb3b7
@@ -1065,13 +1067,13 @@ Perl_gv_fetchmethod_pvn_flags(pTHX_ HV *stash, const char *name, const STRLEN le
dcb3b7
 	ostash = stash;
dcb3b7
     }
dcb3b7
 
dcb3b7
-    gv = gv_fetchmeth_pvn(stash, name, nend - name, 0, flags);
dcb3b7
+    gv = gv_fetchmeth_pvn(stash, name, name_end - name, 0, flags);
dcb3b7
     if (!gv) {
dcb3b7
 	if (strEQ(name,"import") || strEQ(name,"unimport"))
dcb3b7
 	    gv = MUTABLE_GV(&PL_sv_yes);
dcb3b7
 	else if (autoload)
dcb3b7
 	    gv = gv_autoload_pvn(
dcb3b7
-		ostash, name, nend - name, GV_AUTOLOAD_ISMETHOD|flags
dcb3b7
+		ostash, name, name_end - name, GV_AUTOLOAD_ISMETHOD|flags
dcb3b7
 	    );
dcb3b7
 	if (!gv && do_croak) {
dcb3b7
 	    /* Right now this is exclusively for the benefit of S_method_common
dcb3b7
@@ -1087,14 +1089,14 @@ Perl_gv_fetchmethod_pvn_flags(pTHX_ HV *stash, const char *name, const STRLEN le
dcb3b7
 				       HV_FETCH_ISEXISTS, NULL, 0)
dcb3b7
 		) {
dcb3b7
 		    require_pv("IO/File.pm");
dcb3b7
-		    gv = gv_fetchmeth_pvn(stash, name, nend - name, 0, flags);
dcb3b7
+		    gv = gv_fetchmeth_pvn(stash, name, name_end - name, 0, flags);
dcb3b7
 		    if (gv)
dcb3b7
 			return gv;
dcb3b7
 		}
dcb3b7
 		Perl_croak(aTHX_
dcb3b7
 			   "Can't locate object method \"%"UTF8f
dcb3b7
 			   "\" via package \"%"HEKf"\"",
dcb3b7
-			            UTF8fARG(is_utf8, nend - name, name),
dcb3b7
+			            UTF8fARG(is_utf8, name_end - name, name),
dcb3b7
                                     HEKfARG(HvNAME_HEK(stash)));
dcb3b7
 	    }
dcb3b7
 	    else {
dcb3b7
@@ -1111,7 +1113,7 @@ Perl_gv_fetchmethod_pvn_flags(pTHX_ HV *stash, const char *name, const STRLEN le
dcb3b7
 			   "Can't locate object method \"%"UTF8f
dcb3b7
 			   "\" via package \"%"SVf"\""
dcb3b7
 			   " (perhaps you forgot to load \"%"SVf"\"?)",
dcb3b7
-			   UTF8fARG(is_utf8, nend - name, name),
dcb3b7
+			   UTF8fARG(is_utf8, name_end - name, name),
dcb3b7
                            SVfARG(packnamesv), SVfARG(packnamesv));
dcb3b7
 	    }
dcb3b7
 	}
dcb3b7
-- 
dcb3b7
2.7.4
dcb3b7