From 5c091650485e133c980d941365d8f1dcb5828e7f Mon Sep 17 00:00:00 2001 From: Kyle M Hall Date: Fri, 27 Sep 2013 12:53:39 -0400 Subject: [PATCH] Bug 10961: Error in GetMarcBiblio can cause severe data loss A bug in GetMarcBiblio can cause severe data loss if your database has records where the biblionumber and biblioitemnumber do not match and the script misc/batchRebuildBiblioTables.pl is run. The Biblio::GetMarcBiblio makes a kall to C4::Biblio::_koha_marc_update_bib_ids which passes the biblionumber as both the biblionumber *and the biblioitemnumber*. Thus, if your biblio and biblioitem numbers are not always equal, you will end up with a record where the biblioitemnumber is incorrect in the record! This is usually not a severe issue, but since batchRebuildBiblioTables uses that record to update the database tables, it ends up updating the wrong biblioitem row! NOTE: What a horrible, horrible typo that was. Tested this with the second patch. Signed-off-by: Mark Tompsett Signed-off-by: Tomas Cohen Arazi (cherry picked from commit 298c4c76a5f231d9cc0935b6f14a5f191b727804) Signed-off-by: Chris Cormack Signed-off-by: Liz Rea --- C4/Biblio.pm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/C4/Biblio.pm b/C4/Biblio.pm index 7db076e510..b4f322b63e 100644 --- a/C4/Biblio.pm +++ b/C4/Biblio.pm @@ -1262,7 +1262,7 @@ sub GetMarcBiblio { my $biblionumber = shift; my $embeditems = shift || 0; my $dbh = C4::Context->dbh; - my $sth = $dbh->prepare("SELECT marcxml FROM biblioitems WHERE biblionumber=? "); + my $sth = $dbh->prepare("SELECT * FROM biblioitems WHERE biblionumber=? "); $sth->execute($biblionumber); my $row = $sth->fetchrow_hashref; my $marcxml = StripNonXmlChars( $row->{'marcxml'} ); @@ -1274,8 +1274,8 @@ sub GetMarcBiblio { if ($@) { warn " problem with :$biblionumber : $@ \n$marcxml"; } return unless $record; - C4::Biblio::_koha_marc_update_bib_ids($record, '', $biblionumber, $biblionumber); - C4::Biblio::EmbedItemsInMarcBiblio($record, $biblionumber) if ($embeditems); + C4::Biblio::_koha_marc_update_bib_ids($record, '', $biblionumber, $row->{biblioitemnumber}); + C4::Biblio::EmbedItemsInMarcBiblio($record, $biblionumber) if ($embeditems); return $record; } else { -- 2.39.5