Hello,

would be nicer to test N rather than guarding + 1UL

size_t allocsize = 4 * N;
if (!allocsize) {
    trigger(malformatted_sql_call_dumb_ass);
    // bail
}

Best Regards.




On Sat, Mar 8, 2014 at 11:09 AM, Richard Hipp <d...@sqlite.org> wrote:

> On Sat, Mar 8, 2014 at 1:25 PM, Zsbán Ambrus <amb...@math.bme.hu> wrote:
>
> > In the sqlite3 console, the following very simple statement gives
> > "Error: out of memory":
> >
> > SELECT char();
> >
> > I think this is a bug.  This query should need very little memory, so
> > it should not give such an error.  I believe it should return a single
> > row with a single value of an empty string.
> >
>
> It isn't really running out of memory....
>
> The implementation of char() allocates 4 bytes of output buffer for each
> input character, which is sufficient to hold any valid unicode codepoint.
> But with zero input characters, that means it tries to allocate a zero-byte
> output buffer.  sqlite3_malloc() returns NULL when asked to allocate zero
> bytes, at which point the char() implementation thinks that the malloc()
> failed and reports the output-of-memory error.
>
> The fix is to allocate 4*N+1 bytes instead of 4*N bytes.  Dan is checking
> in the fix even as I type this reply.
>
>
> --
> D. Richard Hipp
> d...@sqlite.org
> _______________________________________________
> sqlite-users mailing list
> sqlite-users@sqlite.org
> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
>
_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to