fix(data): reject partial and malformed map data
This commit is contained in:
28
strans.c
28
strans.c
@@ -406,17 +406,18 @@ static int
|
||||
maplookup(Trie *t, Str *key, Str *out)
|
||||
{
|
||||
char buf[Maxutf], *v;
|
||||
int klen, vlen;
|
||||
int klen, match, vlen;
|
||||
|
||||
if(key->n == 0)
|
||||
if(out != nil)
|
||||
sclear(out);
|
||||
if(t == nil || key == nil || key->n == 0)
|
||||
return 0;
|
||||
v = nil;
|
||||
vlen = 0;
|
||||
klen = stoutf(key, buf, sizeof(buf));
|
||||
if(!trielookup(t, buf, klen, &v, &vlen))
|
||||
match = trielookup(t, buf, klen, &v, &vlen);
|
||||
if(match == TrieMiss)
|
||||
return 0;
|
||||
if(match == TrieExact && out != nil && !sinit(out, v, vlen))
|
||||
return 0;
|
||||
if(out != nil && v != nil)
|
||||
sinit(out, v, vlen);
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -1043,16 +1044,17 @@ int
|
||||
mapget(Trie *t, Str *key, Str *out)
|
||||
{
|
||||
char buf[Maxutf], *v;
|
||||
int klen, vlen;
|
||||
int klen, match, vlen;
|
||||
|
||||
if(key->n == 0)
|
||||
if(out != nil)
|
||||
sclear(out);
|
||||
if(key == nil || out == nil || key->n == 0)
|
||||
return 0;
|
||||
klen = stoutf(key, buf, sizeof(buf));
|
||||
v = trieget(t, buf, klen, &vlen);
|
||||
if(v == nil)
|
||||
match = trielookup(t, buf, klen, &v, &vlen);
|
||||
if(match != TrieExact)
|
||||
return 0;
|
||||
sinit(out, v, vlen);
|
||||
return 1;
|
||||
return sinit(out, v, vlen);
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
Reference in New Issue
Block a user