fix(data): reject partial and malformed map data

This commit is contained in:
2026-08-14 23:09:55 +09:00
parent 38475318db
commit bfe83d0119
10 changed files with 220 additions and 125 deletions

25
str.c
View File

@@ -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