I'm forwarding this bug report to the members of bug#299026, `ITP: tinycdb'.

On August 17, 2006 at 3:06PM +0900,
ueno (at unixuser.org) wrote:

> Package: tinycdb
> Version: 0.74-1
> Tags: patch
> 
> If dlenp arg of cdb_seek point to the integer variable whose value is 0,
> cdb_seek does not set dlenp correctly.  This behavior is not documented
> and I think it is unintended.  Due to this, the dbskkd-cdb package
> compiled with gcc-4.0 does not work well.
> 
> To reproduce
> 
> $ echo "+3,5:one->Hello\n" | cdbmake test.cdb test.cdb.tmp

or use
$ /bin/echo -e "+3,5:one->Hello\n" | cdbmake test.cdb test.cdb.tmp
if your shell's `echo' doesn't enable interpretation of backslash escapes.

> $ gcc -o testcdb testcdb.c -lcdb
> $ ./testcdb ./test.cdb one
> dlen = 0 # <- it should be 5
> $ cat testcdb.c
> #include <stdio.h>
> #include <string.h>
> #include <assert.h>
> #include <sys/types.h>
> #include <sys/stat.h>
> #include <fcntl.h>
> #include <cdb.h>
> 
> int main (int argc, char **argv)
> {
>   int fd, ret;
>   const char *key;
>   unsigned klen, dlen = 0; // if dlen = 1, it works as expected
> 
>   assert (argc == 3);
>   fd = open (argv[1], O_RDONLY);
>   if (fd == -1)
>     {
>       perror ("open");
>       return 1;
>     }
> 
>   key = argv[2];
>   klen = strlen (key);
>   ret = cdb_seek (fd, key, klen, &dlen);
>   if (ret == -1)
>     return 1;
>   else if (ret == 0)
>     printf ("not found");
>   else
>     printf ("dlen = %d\n", dlen);
> 
>   return 0;
> }
> 
> Here is a patch to fix it
> 
> --- cdb_seek.c~       2006-08-17 15:02:16.000000000 +0900
> +++ cdb_seek.c        2006-08-17 15:02:43.000000000 +0900
> @@ -75,7 +75,7 @@
>       /* read the key from file and compare with wanted */
>       unsigned l = klen, c;
>       const char *k = (const char*)key;
> -     if (*dlenp)
> +     if (dlenp)
>         *dlenp = cdb_unpack(rbuf + 4); /* save value length */
>       for(;;) {
>         if (!l) /* the whole key read and matches, return */
> 
> Regards,
> -- 
> Daiki Ueno

Daiki, thanks for your report.

This bug causes my packages dbskkd-cdb and skksearch unusable.
I'm thinking about applying workaround patches to dbskkd-cdb and
skksearch due to this bug for the moment.  Anyway, I hope this bug
will be fixed shortly...

Michael, could you fix this bug in tinycdb 0.76?  Could anyone
update the Debian tinycdb package?

Thanks,
-- 
Tatsuya Kinoshita

Attachment: pgpHxivJ8MNKX.pgp
Description: PGP signature

Reply via email to