ports/137051: libOFX does not handle encoding properly

Takanori Watanabe takawata at init-main.com
Fri Jul 24 12:20:03 UTC 2009


>Number:         137051
>Category:       ports
>Synopsis:       libOFX does not handle encoding properly
>Confidential:   no
>Severity:       critical
>Priority:       low
>Responsible:    freebsd-ports-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Fri Jul 24 12:20:01 UTC 2009
>Closed-Date:
>Last-Modified:
>Originator:     Takanori Watanabe
>Release:        8.0-CURRENT
>Organization:
>Environment:
FreeBSD konata.init-main.com 8.0-CURRENT FreeBSD 8.0-CURRENT #9 r194239M: Tue Jun 16 00:55:05 JST 2009     takawata at rin.init-main.com:/usr/obj/usr/src.svn/head/sys/LIEUTENANT  i386
>Description:
libOFX does not handle OFX headers properly because each header contains LF (and possibly CR) and does not take care when handle that header. So the encoding header is not handled properly.
>How-To-Repeat:
Use libofx related tools (gnucash import, ofxdump ....etc. ) to import OFX file with UTF-8 encoding.

>Fix:
add file attached as files/patch-utf8_fix and recompile it.

Patch attached with submission follows:

--- lib/ofx_preproc.cpp.orig	2009-07-24 18:48:05.000000000 +0900
+++ lib/ofx_preproc.cpp	2009-07-24 20:34:52.000000000 +0900
@@ -151,7 +151,7 @@
 		  fromcode=LIBOFX_DEFAULT_INPUT_ENCODING;
 		}
 	      }
-	      else if(ofx_encoding.compare("USASCII")==0) {
+	      else if(ofx_encoding.compare("UTF-8")==0) {
 		fromcode="UTF-8";
 	      }
 	      else
@@ -170,6 +170,16 @@
 	      header_name.assign(s_buffer.substr(0,header_separator_idx));
 	      header_value.assign(s_buffer.substr(header_separator_idx+1));
 	      message_out(DEBUG,"ofx_proc_file():Header: "+header_name+" with value: "+header_value+" has been found");
+
+	      if((header_separator_idx = header_value.find('\r', 0))
+		 != std::string::npos)
+		header_value.resize(header_separator_idx);
+
+	      if((header_separator_idx = header_value.find('\n', 0))
+		 != std::string::npos)
+		header_value.resize(header_separator_idx);
+	      
+
 	      if(header_name.compare("ENCODING")==0) {
 		ofx_encoding.assign(header_value);
 	      }


>Release-Note:
>Audit-Trail:
>Unformatted:



More information about the freebsd-ports-bugs mailing list