The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/env perl
#
# Test fix for RT #49872
#

use strict;
use Test::More;
use Env::C;

if (Env::C::using_safe_putenv()) {
    plan skip_all => "perl leaks with PERL_USE_SAFE_PUTENV";
}

unless (-f '/proc/self/statm') {
    plan skip_all => 'this test requires /proc/self/statm';
}

plan tests => 1;

Env::C::setenv(TZ => 'GMT');

my $start_size = memusage();

for (1..300000) {
    $ENV{TZ} = 'GMT';
    $ENV{TZ} = '';
}

my $end_size = memusage();

cmp_ok $end_size, '==', $start_size, 'setenv does not leak';

sub is_memusage_supported {
    return 1 if -f "/proc/self/statm";
}

sub memusage {
    my $pid = $$;

    my ($size) = split /\s+/, slurp('/proc/self/statm');

    return $size;
}

sub slurp {
    my $file = shift;

    local $/ = undef;

    open my $fh, '<', $file or die "failed to open $file: $!";

    my $content = <$fh>;

    return $content;
}