diff options
author | Tony Cook <tony@develop-help.com> | 2013-09-03 10:17:35 +1000 |
---|---|---|
committer | Tony Cook <tony@develop-help.com> | 2013-09-09 15:22:18 +1000 |
commit | 41188aa0f6683329a6ebb1811827fce0a096df6e (patch) | |
tree | 2a32b38c849f9ad1074e92699426237a5ebc2ed4 /ext | |
parent | 788436d2421782aa270928cb9fa6214f251f6797 (diff) | |
download | perl-41188aa0f6683329a6ebb1811827fce0a096df6e.tar.gz |
[perl #117265] correctly handle overloaded strings
Diffstat (limited to 'ext')
-rw-r--r-- | ext/File-Glob/Glob.xs | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/ext/File-Glob/Glob.xs b/ext/File-Glob/Glob.xs index 43904df434..6189b0fa7a 100644 --- a/ext/File-Glob/Glob.xs +++ b/ext/File-Glob/Glob.xs @@ -136,6 +136,12 @@ csh_glob(pTHX_ AV *entries, SV *patsv) else pat = SvPV_nomg(patsv,len), is_utf8 = !!SvUTF8(patsv); patend = pat + len; + assert(SvTYPE(entries) != SVt_PVAV); + sv_upgrade((SV *)entries, SVt_PVAV); + + if (!IS_SAFE_SYSCALL(pat, len, "pattern", "glob")) + return FALSE; + /* extract patterns */ s = pat-1; while (++s < patend) { @@ -225,11 +231,6 @@ csh_glob(pTHX_ AV *entries, SV *patsv) } end_of_parsing: - assert(SvTYPE(entries) != SVt_PVAV); - sv_upgrade((SV *)entries, SVt_PVAV); - if (!IS_SAFE_SYSCALL(patsv, "pattern", "glob")) - return FALSE; - if (patav) { I32 items = AvFILLp(patav) + 1; SV **svp = AvARRAY(patav); |