From 3b8d3da261cc3a4cc62e5a4ba4041af366088fc5 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 --- C4/Biblio.pm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/C4/Biblio.pm b/C4/Biblio.pm index 7e0aa1f..533932b 100644 --- a/C4/Biblio.pm +++ b/C4/Biblio.pm @@ -1268,7 +1268,7 @@ sub GetMarcBiblio { } 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'} ); @@ -1280,8 +1280,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.1.4