Hi all, I found a readfile() BUG with version 3.15.2, it will cause file's partial content missed. Just as bellow says:
commit e624d8571dfeb30566da72657c71776e2f6c1a56Author: Gang Deng <gavin4c...@sina.com>Date: Thu Dec 15 21:58:07 2016 +0800 shell: fix blob partial missing when readfile Without this patch, the readfile(X) SQL function translate the file's content to blob util reachs a '\0' byte, which was obviously a bug. This may cause partial content missed. Signed-off-by: Gang Deng <gavin4c...@sina.com> diff --git a/src/shell.c b/src/shell.cindex d0b743c..a3e04c0 100644--- a/src/shell.c+++ b/src/shell.c@@ -2285,7 +2285,7 @@ static int process_input(ShellState *p, FILE *in); ** ** NULL is returned if any error is encountered. */-static char *readFile(const char *zName){+static char *readFile(const char *zName, long *pLen){ FILE *in = fopen(zName, "rb"); long nIn; size_t nRead;@@ -2303,6 +2303,8 @@ static char *readFile(const char *zName){ return 0; } pBuf[nIn] = 0;+ if (pLen)+ *pLen = nIn; return pBuf; } @@ -2318,12 +2320,13 @@ static void readfileFunc( ){ const char *zName; void *pBuf;+ long nLen; UNUSED_PARAMETER(argc); zName = (const char*)sqlite3_value_text(argv[0]); if( zName==0 ) return;- pBuf = readFile(zName);- if( pBuf ) sqlite3_result_blob(context, pBuf, -1, sqlite3_free);+ pBuf = readFile(zName, &nLen);+ if( pBuf ) sqlite3_result_blob(context, pBuf, nLen, sqlite3_free); } /*@@ -3416,7 +3419,7 @@ static int do_meta_command(char *zLine, ShellState *p){ if( nArg!=2 ){ raw_printf(stderr, "Usage: .check GLOB-PATTERN\n"); rc = 2;- }else if( (zRes = readFile("testcase-out.txt"))==0 ){+ }else if( (zRes = readFile("testcase-out.txt", NULL))==0 ){ raw_printf(stderr, "Error: cannot read 'testcase-out.txt'\n"); rc = 2; }else if( testcase_glob(azArg[1],zRes)==0 ){ Best Regards,gavin _______________________________________________ sqlite-users mailing list sqlite-users@mailinglists.sqlite.org http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users