--- Joe Wilson <[EMAIL PROTECTED]> wrote: > A quick check in a few of the .c files turn up 64 bit assumptions > in sqlite3VdbeSerialType, sqlite3VdbeSerialGet and anything related > to floating point number support.
Upon closer inspection, if a database did not use any 64 bit integer values or floating point numbers then sqlite3VdbeSerialType and sqlite3VdbeSerialGet may not encounter the 64-bit specific code (for 6-byte and 8-byte integer encodings). sqlite3atoi64() obviously deals with 64 bit integers, but parsing a number greater than a 32 bit integer with the i64 set to a 32-bit int type would only result in a wrong result, not a crash. In sqlite3PutVarint, if u64 is actually defined/typedef'd as a 32 bit unsigned integer, then performing <<32 yields an undefined value by the C standard: int sqlite3PutVarint(unsigned char *p, u64 v){ int i, j, n; u8 buf[10]; if( v & (((u64)0xff000000)<<32) ){ ~$ cat b.c #include <stdio.h> int left31(int a) { return a << 31; } int left32(int a) { return a << 32; } main() { int v = 0xff000000; printf("%08x\n", left31(v)); printf("%08x\n", left32(v)); } ~$ gcc b.c -o b b.c: In function `left32': b.c:3: warning: left shift count >= width of type ~$ ./b 00000000 ff000000 But try adding -DSQLITE_OMIT_FLOATING_POINT=1 to your compile and see what happens. ____________________________________________________________________________________ Do you Yahoo!? Everyone is raving about the all-new Yahoo! Mail beta. http://new.mail.yahoo.com ----------------------------------------------------------------------------- To unsubscribe, send email to [EMAIL PROTECTED] -----------------------------------------------------------------------------