some more compiler attributes

make sure all textcode/scan_* routines work if dest or destlen is NULL
This commit is contained in:
leitner
2025-03-17 13:21:55 +00:00
parent 144912a41d
commit fb5dcdf7fe
6 changed files with 56 additions and 43 deletions

View File

@@ -63,11 +63,11 @@ size_t scan_jsonescape(const char *src,char *dest,size_t *destlen) {
++written;
}
done:
*destlen=written;
if (destlen) *destlen=written;
return i;
abort:
if (prev!=(unsigned int)-1) i-=6; // if we abort and there still was an open surrogate pair, cancel it
*destlen=written;
if (destlen) *destlen=written;
return i;
}

View File

@@ -8,16 +8,16 @@ size_t scan_quotedprintable(const char *src,char *dest,size_t *destlen) {
if (s[i]=='=') {
int j=scan_fromhex(s[i+1]);
if (j<0) break;
dest[written]=j<<4;
if (dest) dest[written]=j<<4;
j=scan_fromhex(s[i+2]);
if (j<0) break;
dest[written]|=j;
if (dest) dest[written]|=j;
i+=2;
} else {
dest[written]=s[i];
if (dest) dest[written]=s[i];
}
++written;
}
*destlen=written;
if (destlen) *destlen=written;
return i;
}

View File

@@ -12,17 +12,17 @@ static size_t inner_scan_urlencoded(const char *src,char *dest,size_t *destlen,i
c=j<<4;
j=scan_fromhex(s[i+2]);
if (j<0) break;
dest[written]=c|j;
if (dest) dest[written]=c|j;
i+=2;
} else if (s[i]=='+' && plus)
dest[written]=' ';
else if (s[i]<=' ' || s[i]=='?' || s[i]=='&')
} else if (s[i]=='+' && plus) {
if (dest) dest[written]=' ';
} else if (s[i]<=' ' || s[i]=='?' || s[i]=='&')
break; /* invalid input */
else
dest[written]=s[i];
if (dest) dest[written]=s[i];
++written;
}
*destlen=written;
if (destlen) *destlen=written;
return i;
}

View File

@@ -8,13 +8,13 @@ size_t scan_yenc(const char *src,char *dest,size_t *destlen) {
if (s[i]=='=') {
++i;
if (s[i]=='y') break;
dest[written]=s[i]-64-42;
if (dest) dest[written]=s[i]-64-42;
} else if (s[i]=='\n' || s[i]=='\r' || s[i]=='\0')
break;
else
dest[written]=s[i]-42;
if (dest) dest[written]=s[i]-42;
++written;
}
*destlen=written;
if (destlen) *destlen=written;
return i;
}