Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

rcatline memory leak on bad $/ #10100

Closed
p5pRT opened this issue Jan 20, 2010 · 6 comments
Closed

rcatline memory leak on bad $/ #10100

p5pRT opened this issue Jan 20, 2010 · 6 comments

Comments

@p5pRT
Copy link

p5pRT commented Jan 20, 2010

Migrated from rt.perl.org#72246 (status was 'resolved')

Searchable as RT72246$

@p5pRT
Copy link
Author

p5pRT commented Jan 20, 2010

From user42@zip.com.au

When concatenating a readline to a utf8 variable, if the readline croaks
for a utf8 $/ value then there seems to be a memory leak. The program
rcat.pl below uses apparently ever more memory.

I suppose the utf8 append case in sv_gets() loses the "tsv" if its
recursive sv_gets() croaks. Is a bad $/ the only way that might happen?

@p5pRT
Copy link
Author

p5pRT commented Jan 20, 2010

From user42@zip.com.au

rcat.pl

@p5pRT
Copy link
Author

p5pRT commented Jan 20, 2010

From user42@zip.com.au



Flags​:
  category=core
  severity=medium


Site configuration information for perl 5.10.1​:

Configured by Debian Project at Sat Nov 21 22​:58​:24 UTC 2009.

Summary of my perl5 (revision 5 version 10 subversion 1) configuration​:
 
  Platform​:
  osname=linux, osvers=2.6.31.6-dsa-ia32, archname=i486-linux-gnu-thread-multi
  uname='linux murphy 2.6.31.6-dsa-ia32 #1 smp tue nov 10 09​:21​:59 cet 2009 i686 gnulinux '
  config_args='-Dusethreads -Duselargefiles -Dccflags=-DDEBIAN -Dcccdlflags=-fPIC -Darchname=i486-linux-gnu -Dprefix=/usr -Dprivlib=/usr/share/perl/5.10 -Darchlib=/usr/lib/perl/5.10 -Dvendorprefix=/usr -Dvendorlib=/usr/share/perl5 -Dvendorarch=/usr/lib/perl5 -Dsiteprefix=/usr/local -Dsitelib=/usr/local/share/perl/5.10.1 -Dsitearch=/usr/local/lib/perl/5.10.1 -Dman1dir=/usr/share/man/man1 -Dman3dir=/usr/share/man/man3 -Dsiteman1dir=/usr/local/man/man1 -Dsiteman3dir=/usr/local/man/man3 -Dman1ext=1 -Dman3ext=3perl -Dpager=/usr/bin/sensible-pager -Uafs -Ud_csh -Ud_ualarm -Uusesfio -Uusenm -DDEBUGGING=-g -Doptimize=-O2 -Duseshrplib -Dlibperl=libperl.so.5.10.1 -Dd_dosuid -des'
  hint=recommended, useposix=true, d_sigaction=define
  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='cc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64',
  optimize='-O2 -g',
  cppflags='-D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include'
  ccversion='', gccversion='4.3.4', gccosandvers=''
  intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234
  d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12
  ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8
  alignbytes=4, prototype=define
  Linker and Libraries​:
  ld='cc', ldflags =' -fstack-protector -L/usr/local/lib'
  libpth=/usr/local/lib /lib /usr/lib /usr/lib64
  libs=-lgdbm -lgdbm_compat -ldb -ldl -lm -lpthread -lc -lcrypt
  perllibs=-ldl -lm -lpthread -lc -lcrypt
  libc=/lib/libc-2.10.1.so, so=so, useshrplib=true, libperl=libperl.so.5.10.1
  gnulibc_version='2.10.1'
  Dynamic Linking​:
  dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E'
  cccdlflags='-fPIC', lddlflags='-shared -O2 -g -L/usr/local/lib -fstack-protector'

Locally applied patches​:
 

@p5pRT
Copy link
Author

p5pRT commented Oct 31, 2010

From @iabyn

On Wed, Jan 20, 2010 at 03​:38​:06PM -0800, Kevin Ryde wrote​:

When concatenating a readline to a utf8 variable, if the readline croaks
for a utf8 $/ value then there seems to be a memory leak. The program
rcat.pl below uses apparently ever more memory.

I suppose the utf8 append case in sv_gets() loses the "tsv" if its
recursive sv_gets() croaks. Is a bad $/ the only way that might happen?

use strict;
use warnings;

open FH, '</dev/null' or die;
for (;;) {
local $/ = "\x{262E}";
my $str = "\x{2622}";
eval { $str .= <FH> };
}

Thanks for the report. Now fixed with commit
  64dc971

--
I before E. Except when it isn't.

@p5pRT
Copy link
Author

p5pRT commented Oct 31, 2010

The RT System itself - Status changed from 'new' to 'open'

@p5pRT
Copy link
Author

p5pRT commented Oct 31, 2010

@iabyn - Status changed from 'open' to 'resolved'

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant