Front page | perl.perl5.porters |
Postings from January 2004
[perl #25151] [PATCH] Text::Balanced extract_multiple, neg. substr length
From:
David Manura
Date:
January 19, 2004 20:45
Subject:
[perl #25151] [PATCH] Text::Balanced extract_multiple, neg. substr length
Message ID:
rt-3.0.8-25151-71443.1.15579086172282@perl.org
# New Ticket Created by David Manura
# Please include the string: [perl #25151]
# in the subject line of all future correspondence about this issue.
# <URL: http://rt.perl.org/rt3/Ticket/Display.html?id=25151 >
This is a bug report for perl from davidm.perl@math2.org,
generated with the help of perlbug 1.34 running under perl v5.8.3.
-----------------------------------------------------------------
[Please enter your report here]
Here's a patch for the extract_multiple function in Text::Balanced 1.95.
The patch includes a new test case that fails in the original code.
The problem was that in certain cases, $unkpos, which is the start index of the
currently being processed unrecognized chunk of text, was not set correctly,
thereby causing the third substr parameter on the below line to be negative,
which in turn yeilds very unexpected results.
push @fields, substr($$textref, $unkpos,
$lastpos-$unkpos).$pref;
===============
--- perl-5.8.3/lib/Text/Balanced/t/extmul.t 2001-11-19 22:59:36.000000000 -0500
+++ perl-5.8.3-patched/lib/Text/Balanced/t/extmul.t 2004-01-19 22:36:36.000000000 -0500
@@ -13,7 +13,7 @@
# Change 1..1 below to 1..last_test_to_print .
# (It may become useful if the test is moved to ./t subdirectory.)
-BEGIN { $| = 1; print "1..85\n"; }
+BEGIN { $| = 1; print "1..86\n"; }
END {print "not ok 1\n" unless $loaded;}
use Text::Balanced qw ( :ALL );
$loaded = 1;
@@ -316,3 +316,10 @@
expect [ pos ], [ 0 ];
expect [ $_ ], [ substr($stdtext3,2) ];
+
+# TEST 86
+
+# Fails in Text-Balanced-1.95 with result ['1 ', '""', '1234']
+$_ = q{ ""1234};
+expect [ extract_multiple(undef, [\&extract_quotelike]) ],
+ [ ' ', '""', '1234' ];
Only in perl-5.8.3-patched/lib/Text/Balanced/t: extmul.t~
diff -r -u perl-5.8.3/lib/Text/Balanced.pm perl-5.8.3-patched/lib/Text/Balanced.pm
--- perl-5.8.3/lib/Text/Balanced.pm 2003-07-04 10:33:00.000000000 -0400
+++ perl-5.8.3-patched/lib/Text/Balanced.pm 2004-01-19 22:35:42.000000000 -0500
@@ -930,7 +930,7 @@
if (defined($field) && length($field))
{
if (!$igunk) {
- $unkpos = pos $$textref
+ $unkpos = $lastpos
if length($pref) && !defined($unkpos);
if (defined $unkpos)
{
===============
[Please do not change anything below this line]
-----------------------------------------------------------------
---
Flags:
category=library
severity=medium
---
Site configuration information for perl v5.8.3:
Configured by dmanura at Mon Jan 19 21:39:59 2004.
Summary of my perl5 (revision 5 version 8 subversion 3) configuration:
Platform:
osname=MSWin32, osvers=4.0, archname=MSWin32-x86-multi-thread
uname=''
config_args='undef'
hint=recommended, useposix=true, d_sigaction=undef
usethreads=undef use5005threads=undef useithreads=define usemultiplicity=define
useperlio=define d_sfio=undef uselargefiles=define usesocks=undef
use64bitint=undef use64bitall=undef uselongdouble=undef
usemymalloc=n, bincompat5005=undef
Compiler:
cc='cl', ccflags ='-nologo -Gf -W3 -MD -DNDEBUG -O1 -DWIN32 -D_CONSOLE -DNO_STRICT -DHAVE_DES_FCRYPT -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -DUSE_PERLIO -DPERL_MSVCRT_READFIX',
optimize='-MD -DNDEBUG -O1',
cppflags='-DWIN32'
ccversion='', gccversion='', gccosandvers=''
intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234
d_longlong=undef, longlongsize=8, d_longdbl=define, longdblsize=10
ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='__int64', lseeksize=8
alignbytes=8, prototype=define
Linker and Libraries:
ld='link', ldflags ='-nologo -nodefaultlib -release -libpath:"c:\perl\lib\CORE" -machine:x86'
libpth=D:\lib\mvs-6.0\VC98\lib
libs= oldnames.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib netapi32.lib uuid.lib wsock32.lib mpr.lib winmm.lib version.lib odbc32.lib odbccp32.lib msvcrt.lib
perllibs= oldnames.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib netapi32.lib uuid.lib wsock32.lib mpr.lib winmm.lib version.lib odbc32.lib odbccp32.lib msvcrt.lib
libc=msvcrt.lib, so=dll, useshrplib=yes, libperl=perl58.lib
gnulibc_version='undef'
Dynamic Linking:
dlsrc=dl_win32.xs, dlext=dll, d_dlsymun=undef, ccdlflags=' '
cccdlflags=' ', lddlflags='-dll -nologo -nodefaultlib -release -libpath:"c:\perl\lib\CORE" -machine:x86'
Locally applied patches:
---
@INC for perl v5.8.3:
d:/testing/perl-5.8.3/lib
.
---
Environment for perl v5.8.3:
HOME=
LANG (unset)
LANGUAGE (unset)
LD_LIBRARY_PATH (unset)
LOGDIR (unset)
PATH=
PERLDB_OPTS=RemotePort=127.0.0.1:2000
PERL_BADLANG (unset)
SHELL (unset)
-
[perl #25151] [PATCH] Text::Balanced extract_multiple, neg. substr length
by David Manura