On 10 July 2017 at 00:22, Dan Ackroyd <dan...@basereality.com> wrote:

> Hi,
>
> I'm passing on an error report from a downstream library that uses
> SQLite -  https://bugs.php.net/bug.php?id=74883 - without having
> tested that it is an accurate bug report. Apologies in advance if it
> is a spurious bug report, however I don't currently have an
> environment to test it trivially.
>
> It seems that trying to open a database with the flags
> SQLITE3_OPEN_READONLY | SQLITE3_OPEN_CREATE set leads to a very
> non-intuitive error message of "out of memory".
>

I'm not sure the report is accurate. The very first thing that
openDatabase() does is check that the flags make sense; if the following
condition is true then SQLITE_MISUSE is returned:

    ((1<<(flags&7)) & 0x46)==0

The flags themselves are defined thusly:

#define SQLITE_OPEN_READONLY         0x00000001
#define SQLITE_OPEN_READWRITE        0x00000002
#define SQLITE_OPEN_CREATE           0x00000004

With SQLITE_OPEN_READONLY | SQLITE_OPEN_CREATE, (flags&7) = 5 and thus:

1 << 5 = 32 = 0x20,  0x20 & 0x46 = 0

Looking at the other cases...

SQLITE_OPEN_READONLY
1 << 1 = 0x02,  0x02 & 0x46 = 0x02

SQLITE_OPEN_READWRITE
1 << 2 = 0x04,  0x04 & 0x46 = 0x04

SQLITE_OPEN_READONLY | SQLITE_OPEN_READWRITE
1 << 3 = 0x08,  0x08 & 0x46 = 0

SQLITE_OPEN_CREATE
1 << 4 = 0x10,  0x10 & 0x46 = 0

SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE
1 << 6 = 0x40,  0x40 & 0x46 = 0x40

SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE | SQLITE_OPEN_READONLY
1 << 7 = 0x80,  0x80 & 0x46 = 0

So you should get SQLITE_MISUSE unless flags&7 is one of the three sensible
states:

SQLITE_OPEN_READONLY
SQLITE_OPEN_READWRITE
SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE

I don't think sqlite is giving you SQLITE_NOMEM here. This is based on code
analysis of versions 3.8.1 and 3.18.0 (it's identical in both; I haven't
checked inbetween versions).

-Rowan
_______________________________________________
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to