A couple of comments. On Feb 23, 2007, at 3:03 PM, Cesar Rodas wrote:
while ( (n=fread(buff,Buffsize,1,file)) > 0) { if (i>0) *value = realloc(*value, (i+1) * Buffsize); memcpy(*value + (i * Buffsize), buff, Buffsize); *len += n; i++; }
You are growing the array in size at each append. This is usually a bad idea; it leads to n^2 complexity. The standard approach is to double the buffer each time it fills up. This is 2*n complexity. However, it's not your bug.
query = sqlite3_mprintf("INSERT INTO blob VALUES('%Q') ", value);
This segfaults because there is no null terminator on the value string. The way SQLite3 reads 'value' is by scanning it until it finds a '\0'. If there is no such character, it scans past the end of the array, leading to the crash you are seeing.
A simple solution is to append this character to the end of the string. However, it the file itself contains a '\0' character, this will lead to the file being truncated in the database. A better solution would be:
file_content = ... your loading code, allocated by malloc ... file_length = ... length of the file ...; query = "INSERT INTO blob VALUES(?);"; sqlite3_prepare_v2(db, query, -1, &qhandle, &errmsg); sqlite3_bind_block(qhandle, 1, file_content, file_length, free); ----------------------------------------------------------------------------- To unsubscribe, send email to [EMAIL PROTECTED] -----------------------------------------------------------------------------