On Wed, Dec 14, 2011 at 2:59 AM, Tod McQuillin <de...@spamcop.net> wrote:

> Hi all,
>
> I've found what appears to be a bug in SQLite 3.7.9 (as found in the
> DBD::SQLite perl module version 1.35).
>

Already fixed.  http://www.sqlite.org/src/info/54cc119811


>
> Running the tests included with DBD::SQLite, I saw test failures and perl
> crashing with a bus error while creating an index.
>
> Running the failing test under dbx, I observed the following:
>
> (dbx) run  t/27_metadata.t
> Running: perl t/27_metadata.t
> (process id 12132)
> Reading libc_psr.so.1
> 1..21
> Reading DBI.so
> Reading Util.so
> Reading SQLite.so
> ok 1 - The object isa DBI::db
> ok 2 - Create table meta1
> ok 3 - Create table meta2
> ok 4 - Create table meta3
> ok 5 - Get primary_key_info for meta1
> ok 6 - Correct primary_key_info returned for meta1
> ok 7 - Get primary_key_info for meta2
> ok 8 - Correct primary_key_info returned for meta2
> ok 9 - Get primary_key_info for meta3
> ok 10 - Correct primary_key_info returned for meta3
> t@1 (l@1) signal BUS (invalid address alignment) in sqlite3CreateIndex at
> line 82187 in file "sqlite3.c"
> 82187       pIndex->azColl[i] = zColl;
>
> Examining the data in more detail showed:
>
> (dbx) print *pIndex
> *pIndex = {
>    zName      = 0x10074d966 "sqlite_autoindex_meta4_1"
>    nColumn    = 2
>    aiColumn   = 0x10074d95c
>    aiRowEst   = 0x10074d940
>    pTable     = 0x100779558
>    tnum       = 0
>    onError    = 'c'
>    autoIndex  = '\001'
>    bUnordered = '\0'
>    zColAff    = (nil)
>    pNext      = (nil)
>    pSchema    = 0x1007390d8
>    aSortOrder = 0x10074d964 ""
>    azColl     = 0x10074d94c
> }
>
> Note that pIndex->azColl is not aligned to an 8-byte boundary as required
> by the sparc64 architecture.
>
> The following (ugly) patch resolves the problem for me, allowing
> DBD::SQLite to pass all tests.  Hopefuly an sqlite developer can make this
> into something a bit prettier:
>
> --- DBD-SQLite-1.35/sqlite3.c~  2011-11-28 18:05:51.000000000 -0600
> +++ DBD-SQLite-1.35/sqlite3.c   2011-12-14 01:29:41.523322000 -0600
> @@ -82103,7 +82103,7 @@
>   nCol = pList->nExpr;
>   pIndex = sqlite3DbMallocZero(db,
>       sizeof(Index) +              /* Index structure  */
> -      sizeof(tRowcnt)*(nCol+1) +   /* Index.aiRowEst   */
> +      sizeof(tRowcnt)*(nCol+1+((**nCol+1)%2)) +   /* Index.aiRowEst   */
>       sizeof(int)*nCol +           /* Index.aiColumn   */
>       sizeof(char *)*nCol +        /* Index.azColl     */
>       sizeof(u8)*nCol +            /* Index.aSortOrder */
> @@ -82114,7 +82114,7 @@
>     goto exit_create_index;
>   }
>   pIndex->aiRowEst = (tRowcnt*)(&pIndex[1]);
> -  pIndex->azColl = (char**)(&pIndex->aiRowEst[**nCol+1]);
> +  pIndex->azColl = (char**)(&pIndex->aiRowEst[**nCol+1+((nCol+1)%2)]);
>   pIndex->aiColumn = (int *)(&pIndex->azColl[nCol]);
>   pIndex->aSortOrder = (u8 *)(&pIndex->aiColumn[nCol]);
>   pIndex->zName = (char *)(&pIndex->aSortOrder[nCol]);
>
> Thanks and regards,
> --
> Tod McQuillin
> ______________________________**_________________
> sqlite-users mailing list
> sqlite-users@sqlite.org
> http://sqlite.org:8080/cgi-**bin/mailman/listinfo/sqlite-**users<http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users>
>



-- 
D. Richard Hipp
d...@sqlite.org
_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to