From 0f70c9987344bac0e88c3070ca8884496a91c7c6 Mon Sep 17 00:00:00 2001 From: Martin Kamerbeek Date: Wed, 15 Jul 2009 06:50:33 +0000 Subject: [PATCH] Fixed a bug where VersionTag->get would return unsafe copies. Also added tests for this. --- docs/changelog/7.x.x.txt | 2 ++ lib/WebGUI/VersionTag.pm | 2 +- t/VersionTag.t | 20 +++++++++++++++++++- 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/docs/changelog/7.x.x.txt b/docs/changelog/7.x.x.txt index b48916faf..aa5e50fde 100644 --- a/docs/changelog/7.x.x.txt +++ b/docs/changelog/7.x.x.txt @@ -8,6 +8,8 @@ - fixed #10621: ThingRecord needs an Asset Icon - fixed #10638: Paste from Admin Bar broken - fixed per-field prices in ThingyRecord + - fixed a bug where VersionTag->get would return an unsafe copy of its + state ( Martin Kamerbeek / Oqapi ) 7.7.14 - fixed #10606: shelf selector diff --git a/lib/WebGUI/VersionTag.pm b/lib/WebGUI/VersionTag.pm index a2dd2e6d3..168a6c920 100644 --- a/lib/WebGUI/VersionTag.pm +++ b/lib/WebGUI/VersionTag.pm @@ -247,7 +247,7 @@ sub get { return $self->{_data}{$name}; } else { - return \%{ $self->{_data} }, + return { %{ $self->{_data} } }, } } diff --git a/t/VersionTag.t b/t/VersionTag.t index 29273e379..a2abd6afa 100644 --- a/t/VersionTag.t +++ b/t/VersionTag.t @@ -14,7 +14,7 @@ use lib "$FindBin::Bin/lib"; use WebGUI::Test; use WebGUI::Session; use WebGUI::VersionTag; -use Test::More tests => 60; # increment this value for each test you create +use Test::More tests => 62; # increment this value for each test you create my $session = WebGUI::Test->session; @@ -242,7 +242,25 @@ ok($adminSiteWideTag->getId() eq $siteWideTagId, 'versionTagMode siteWide + admi $admin_session->var()->end(); $admin_session->close(); +# Check if get returns a safe copy +my $name = $userTag->get( 'name' ); +my $safeCopy = $userTag->get; +$safeCopy->{ name } = 'NotSoSafeAfterAll!'; + +is( + $userTag->get( 'name' ), + $name, + 'get returns a safe copy of the internal data hash' +); + +my $otherSafeCopy = $userTag->get; + +isnt( + $safeCopy, + $otherSafeCopy, + 'get returns unique safe copies on each invocation' +); $userTag->rollback(); $siteWideTag->rollback();