[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: crash in guile-sqlite3
From: |
Daniel Krueger |
Subject: |
Re: crash in guile-sqlite3 |
Date: |
Tue, 1 May 2012 17:05:27 +0200 |
Hi,
I just wanted to note that it should work just to use (make-pointer #xff).
- Daniel
On Tue, May 1, 2012 at 5:01 PM, Joonas Sarajärvi <address@hidden> wrote:
> 2012/5/1 Joonas Sarajärvi <address@hidden>:
>
>> However, thank you for taking a look at the problem. The change you
>> placed at
>> git://gitorious.org/~sunjoong/guile-sqlite3/sunjoongs-guile-sqlite3.git
>> seems to completely resolve the crash for me.
>>
>> -Joonas
>
> Replying to myself, I now noticed that the change will not work in a
> 64-bit computer. My impression is that this is due to the fact that
> the 5th parameter taken by sqlite3_bind_text function is really a
> pointer and not an int. On amd64 computers, int are 4 bytes wide while
> pointers are 8 bytes.
>
> I also think that the older way of passing SQLITE_TRANSIENT as a
> pointer should work. However, there was a small bug in the code that
> constructed the pointer. I made a yet-another clone of the main
> guile-sqlite3 repository and pushed a change that I think fixes this.
> The change I did is also here:
>
> diff --git a/sqlite3.scm b/sqlite3.scm
> index fcc1fdf..5047e71 100644
> --- a/sqlite3.scm
> +++ b/sqlite3.scm
> @@ -301,8 +301,9 @@
> int
> (dynamic-func "sqlite3_bind_null" libsqlite3)
> (list '* int)))
> - (sqlite-transient (bytevector->pointer
> - (make-bytevector (sizeof '*) #xff))))
> + (sqlite-transient (dereference-pointer
> + (bytevector->pointer
> + (make-bytevector (sizeof '*) #xff)))))
> (lambda (stmt key val)
> (assert-live-stmt! stmt)
> (let ((idx (key->index stmt key))
>
>
> The test case by Sunjoong Lee is also cherry-picked to the git branch
> I placed on gitorious. Hopefully it was acceptable to include it.
> Should I make a merge request of this?
>
> -Joonas
>