[interchange] Only apply GDBM filters if they are not already installed

David Christensen interchange-cvs at icdevgroup.org
Fri Aug 31 01:22:44 UTC 2012


commit 0c31ea3287df97c8fedbf23ad71244e4ebe019c7
Author: David Christensen <david at endpoint.com>
Date:   Thu Aug 30 20:01:28 2012 -0500

    Only apply GDBM filters if they are not already installed
    
    In certain circumstances, using the same GDBM-based file in multiple catalogs with
    GDBM_ENABLE_UTF8=1 set was causing the GDBM filters to be installed multiple times on the same
    handle, which was resulting in encoding/decoding errors.
    
    Vend::Table::GDBM will now only install the filters if they do not exist on this handle, which
    should preserve existing behavior plus account for these corner-cases.

 lib/Vend/Table/GDBM.pm |    8 ++++----
 1 files changed, 4 insertions(+), 4 deletions(-)
---
diff --git a/lib/Vend/Table/GDBM.pm b/lib/Vend/Table/GDBM.pm
index fb82dbb..559f904 100644
--- a/lib/Vend/Table/GDBM.pm
+++ b/lib/Vend/Table/GDBM.pm
@@ -150,10 +150,10 @@ sub apply_utf8_filters {
 	my $out_filter = sub { $_ = encode('utf-8', $_) };
 	my $in_filter  = sub { $_ = decode('utf-8', $_) };
 
-	$handle->filter_store_key($out_filter);
-	$handle->filter_store_value($out_filter);
-	$handle->filter_fetch_key($in_filter);
-	$handle->filter_fetch_value($in_filter);
+	$handle->filter_store_key($out_filter)   unless $handle->filter_store_key();
+	$handle->filter_store_value($out_filter) unless $handle->filter_store_value();
+	$handle->filter_fetch_key($in_filter)    unless $handle->filter_fetch_key();
+	$handle->filter_fetch_value($in_filter)  unless $handle->filter_fetch_value();
 
 	return $handle;
 }



More information about the interchange-cvs mailing list