fix(data): reject partial and malformed map data
This commit is contained in:
25
str.c
25
str.c
@@ -1,24 +1,33 @@
|
||||
#include "dat.h"
|
||||
#include "fn.h"
|
||||
|
||||
void
|
||||
int
|
||||
sinit(Str *s, char *src, int n)
|
||||
{
|
||||
Str tmp = {0};
|
||||
Rune r;
|
||||
int len;
|
||||
|
||||
if(s == nil)
|
||||
return 0;
|
||||
s->n = 0;
|
||||
if(n < 0 || (n > 0 && src == nil))
|
||||
return;
|
||||
while(n > 0 && s->n < Maxrunes){
|
||||
return 0;
|
||||
while(n > 0){
|
||||
if(tmp.n >= Maxrunes)
|
||||
return 0;
|
||||
if(!fullrune(src, n))
|
||||
break;
|
||||
len = chartorune(&s->r[s->n], src);
|
||||
if(len > n)
|
||||
break;
|
||||
s->n++;
|
||||
return 0;
|
||||
len = chartorune(&r, src);
|
||||
if(len > n || (r == Runeerror && len == 1) ||
|
||||
(r >= 0xd800 && r <= 0xdfff))
|
||||
return 0;
|
||||
tmp.r[tmp.n++] = r;
|
||||
src += len;
|
||||
n -= len;
|
||||
}
|
||||
*s = tmp;
|
||||
return 1;
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
Reference in New Issue
Block a user