upas/fs: fix precedence bugs, compare digest pointer to nil

This commit is contained in:
cinap_lenrek 2017-12-19 20:44:15 +01:00
parent 417bdbb869
commit a84a5c21ce
4 changed files with 17 additions and 18 deletions

View file

@ -319,7 +319,7 @@ found:
void void
digestmessage(Mailbox *mb, Message *m) digestmessage(Mailbox *mb, Message *m)
{ {
assert(m->digest == 0); assert(m->digest == nil);
m->digest = emalloc(SHA1dlen); m->digest = emalloc(SHA1dlen);
sha1((uchar*)m->start, m->end - m->start, m->digest, nil); sha1((uchar*)m->start, m->end - m->start, m->digest, nil);
if(mtreeisdup(mb, m)){ if(mtreeisdup(mb, m)){
@ -351,7 +351,7 @@ cachebody(Mailbox *mb, Message *m)
m->size -= m->badchars; /* sneaky */ m->size -= m->badchars; /* sneaky */
m->ibadchars = m->badchars; m->ibadchars = m->badchars;
} }
if(m->digest == 0) if(m->digest == nil)
digestmessage(mb, m); digestmessage(mb, m);
if(m->lines == 0) if(m->lines == 0)
m->lines = countlines(m); m->lines = countlines(m);
@ -396,7 +396,7 @@ insurecache(Mailbox *mb, Message *m)
msgdecref(mb, m); msgdecref(mb, m);
return -1; return -1;
} }
if(m->digest == 0) if(m->digest == nil)
sysfatal("digest?"); sysfatal("digest?");
countparts(m); countparts(m);
return 0; return 0;

View file

@ -206,13 +206,13 @@ static int
validmessage(Mailbox *mb, Message *m, int level) validmessage(Mailbox *mb, Message *m, int level)
{ {
if(level){ if(level){
if(m->digest != 0) if(m->digest != nil)
goto lose; goto lose;
if(m->fileid <= 1000000ull<<8) if(m->fileid <= 1000000ull<<8)
if(m->fileid != 0) if(m->fileid != 0)
goto lose; goto lose;
}else{ }else{
if(m->digest == 0) if(m->digest == nil)
goto lose; goto lose;
if(m->size == 0) if(m->size == 0)
goto lose; goto lose;
@ -280,18 +280,17 @@ nibble(int c)
static uchar* static uchar*
hackdigest(char *s) hackdigest(char *s)
{ {
uchar t[SHA1dlen];
int i; int i;
if(strcmp(s, "-") == 0) if(strcmp(s, "-") == 0)
return 0; return nil;
if(strlen(s) != 2*SHA1dlen){ if(strlen(s) != 2*SHA1dlen){
eprint("bad digest %s\n", s); eprint("bad digest %s\n", s);
return 0; return nil;
} }
for(i = 0; i < SHA1dlen; i++) for(i = 0; i < SHA1dlen; i++)
t[i] = nibble(s[2*i])<<4 | nibble(s[2*i + 1]); ((uchar*)s)[i] = nibble(s[2*i])<<4 | nibble(s[2*i + 1]);
memmove(s, t, SHA1dlen); s[i] = 0;
return (uchar*)s; return (uchar*)s;
} }
@ -342,8 +341,8 @@ rdidx(Biobuf *b, Mailbox *mb, Message *parent, int npart, int level)
ll = &parent->part; ll = &parent->part;
nparts = npart; nparts = npart;
for(; npart != 0 && (s = Brdstr(b, '\n', 1)); npart--){ for(; npart != 0 && (s = Brdstr(b, '\n', 1)); npart--){
m = 0; m = nil;
digest = 0; digest = nil;
n = tokenize(s, f, nelem(f)); n = tokenize(s, f, nelem(f));
if(n != Idxfields){ if(n != Idxfields){
dead: dead:
@ -357,11 +356,11 @@ dead:
continue; continue;
} }
digest = hackdigest(f[0]); digest = hackdigest(f[0]);
if(digest == 0 ^ level != 0) if(level == 0){
goto dead; if(digest == nil)
if(level == 0) goto dead;
m = mtreefind(mb, digest); m = mtreefind(mb, digest);
else } else
m = findmessage(mb, parent, nparts - npart); m = findmessage(mb, parent, nparts - npart);
if(m){ if(m){
/* /*

View file

@ -18,7 +18,7 @@ mtreeisdup(Mailbox *mb, Message *m)
Mtree t; Mtree t;
assert(Topmsg(mb, m) && m->digest); assert(Topmsg(mb, m) && m->digest);
if(!m->digest) if(m->digest == nil)
return 0; return 0;
memset(&t, 0, sizeof t); memset(&t, 0, sizeof t);
t.m = m; t.m = m;

View file

@ -127,7 +127,7 @@ okmsg(Mailbox *mb, Message *m, Inbuf *b)
if(m->size > Maxmsg) if(m->size > Maxmsg)
return -1; return -1;
m->bend = m->rbend = m->end; m->bend = m->rbend = m->end;
if(m->digest == 0) if(m->digest == nil)
digestmessage(mb, m); digestmessage(mb, m);
return 0; return 0;
} }