From: Adam Dickmeiss Date: Tue, 9 Apr 1996 10:05:20 +0000 (+0000) Subject: Bug fix: prev_name buffer possibly too small; allocated in key_file_init. X-Git-Tag: ZEBRA.1.0~500 X-Git-Url: http://git.indexdata.com/?p=idzebra-moved-to-github.git;a=commitdiff_plain;h=0c499c33b853a029f00aed4b3630374e955e1c86 Bug fix: prev_name buffer possibly too small; allocated in key_file_init. --- diff --git a/index/kinput.c b/index/kinput.c index 9429169..2ba038d 100644 --- a/index/kinput.c +++ b/index/kinput.c @@ -4,7 +4,10 @@ * Sebastian Hammer, Adam Dickmeiss * * $Log: kinput.c,v $ - * Revision 1.15 1996-03-21 14:50:09 adam + * Revision 1.16 1996-04-09 10:05:20 adam + * Bug fix: prev_name buffer possibly too small; allocated in key_file_init. + * + * Revision 1.15 1996/03/21 14:50:09 adam * File update uses modify-time instead of change-time. * * Revision 1.14 1996/02/07 14:06:37 adam @@ -103,7 +106,7 @@ void getFnameTmp (char *fname, int no) void key_file_chunk_read (struct key_file *f) { int nr = 0, r, fd; - char fname[256]; + char fname[1024]; getFnameTmp (fname, f->no); fd = open (fname, O_RDONLY); if (fd == -1) @@ -156,7 +159,7 @@ struct key_file *key_file_init (int no, int chunk) f->length = 0; f->readHandler = NULL; f->buf = xmalloc (f->chunk); - f->prev_name = xmalloc (256); + f->prev_name = xmalloc (512); *f->prev_name = '\0'; key_file_chunk_read (f); return f; @@ -265,7 +268,7 @@ struct heap_info *key_heap_init (int nkeys, for (i = 0; i<= nkeys; i++) { hi->ptr[i] = i; - hi->info.buf[i] = xmalloc (512); + hi->info.buf[i] = xmalloc (768); } return hi; } @@ -459,6 +462,20 @@ void key_input (const char *dict_fname, const char *isam_fname, struct heap_info *hi; struct progressInfo progressInfo; + if (nkeys < 0) + { + char fname[1024]; + nkeys = 0; + while (1) + { + getFnameTmp (fname, nkeys+1); + if (access (fname, R_OK) == -1) + break; + nkeys++; + } + if (!nkeys) + return ; + } dict = dict_open (dict_fname, cache, 1); if (!dict) { diff --git a/index/main.c b/index/main.c index f957daf..f68f00e 100644 --- a/index/main.c +++ b/index/main.c @@ -4,7 +4,10 @@ * Sebastian Hammer, Adam Dickmeiss * * $Log: main.c,v $ - * Revision 1.38 1996-03-26 16:01:14 adam + * Revision 1.39 1996-04-09 10:05:21 adam + * Bug fix: prev_name buffer possibly too small; allocated in key_file_init. + * + * Revision 1.38 1996/03/26 16:01:14 adam * New setting lockPath: directory of various lock files. * * Revision 1.37 1996/03/19 12:43:26 adam @@ -222,6 +225,10 @@ int main (int argc, char **argv) } if (!strcmp (arg, "update")) cmd = 'u'; + else if (!strcmp (arg, "update1")) + cmd = 'U'; + else if (!strcmp (arg, "update2")) + cmd = 'm'; else if (!strcmp (arg, "dump")) cmd = 's'; else if (!strcmp (arg, "del") || !strcmp(arg, "delete")) @@ -301,28 +308,42 @@ int main (int argc, char **argv) zebraIndexLockMsg ("w"); } zebraIndexWait (0); - + memcpy (&rGroup, &rGroupDef, sizeof(rGroup)); - key_open (mem_max); rGroup.path = arg; - if (cmd == 'u') + switch (cmd) { + case 'u': + key_open (mem_max); logf (LOG_LOG, "Updating %s", rGroup.path); repositoryUpdate (&rGroup); - } - else if (cmd == 'd') - { + nsections = key_close (); + break; + case 'U': + key_open (mem_max); + logf (LOG_LOG, "Updating (pass 1) %s", rGroup.path); + repositoryUpdate (&rGroup); + key_close (); + nsections = 0; + break; + case 'd': + key_open (mem_max); logf (LOG_LOG, "Deleting %s", rGroup.path); repositoryDelete (&rGroup); - } - else if (cmd == 's') - { + nsections = key_close (); + break; + case 's': logf (LOG_LOG, "Dumping %s", rGroup.path); repositoryShow (&rGroup); + nsections = 0; + break; + case 'm': + nsections = -1; + break; + default: + nsections = 0; } - cmd = 0; - nsections = key_close (); if (nsections) { logf (LOG_LOG, "Merging with index");