ref: ee8ac152c7ed0eb09e087212a4e521bb448c7831
parent: c5a081872fe23806498b05fc8cb72261aaf0d007
author: Sigrid Solveig Haflínudóttir <[email protected]>
date: Thu Jun 3 02:27:34 EDT 2021
ascii85: support z, validate each character, do NOT change the input buffer
--- a/f_ascii85.c
+++ b/f_ascii85.c
@@ -14,14 +14,24 @@
USED(aux);
in = bufdata(bi, &insz);
- for(i = j = 0; i < insz; i++){
- if(!isws(in[i]))
- in[j++] = in[i];
- }
- insz = j;
- for(i = 0; i < insz; i += 5){
- for(x = 0, j = 0; j < 5; j++)
- x = x*85 + ((i+j < insz ? in[i+j] : 'u') - 33);
+ for(i = 0; i < insz;){
+ if(isws(in[i])){
+ i++;
+ continue;
+ }
+
+ if(in[i] == 'z'){
+ x = 0;
+ i++;
+ }else{
+ for(x = 0, j = 0; j < 5; j++, i++){
+ if(in[i] < '!' || in[i] > 'u'){
+ werrstr("invalid ascii85 char 0x%02x", in[i]);
+ return -1;
+ }
+ x = x*85 + ((i < insz ? in[i] : 'u') - '!');
+ }
+ }
c[0] = x >> 24;
c[1] = x >> 16;
c[2] = x >> 8;