On Mon, Feb 2, 2015 at 3:37 AM, Howard Chu <hyc(a)symas.com> wrote:
Hallvard Breien Furuseth wrote:
>
> On 02/02/15 00:40, Howard Chu wrote:
>>
>> It looks OK to me. No one raises any concerns I'll commit it in a few
>> hours.
>
>
> Some sudden last thoughts:
>
> mdb_dump.c also has a check (memchr(key.mv_data, '\0', key.mv_size)
> to exclude non-databases, which is no longer valid.
Good point. As Timur's patch comment notes, we probably need an API call "is
valid DB" now.
> Database names with \0 in them can no longer be spelled as strings,
> everything which gets DB names from the database must use binary blobs.
> Including mdb_load and mdb_dump; I notice mdb_load uses
> strdup() for the "database=" name. Come to think of it, I have no
> idea if the dump format supports DB names with \0 in them.
No, it doesn't. It's the BDB format, and BDB only accepted C strings.
(Just noticed that I hit "reply" instead of "reply all". Sorry. Now
reposting to the mailing list.)
I think it is an acceptable limitation of mdb_dump and mdb_load. This
is not the only thing they don't support: they also don't work with
user-defined comparison functions. Although I could think about ways
to solve it.
For example, we could add a command line option that would make
mdb_dump output db names as a string of hexadecimal numbers, and
mdb_load interpret them as such.