base64_digits: reduce scope, implicit zero, +1 size
the array is not accessed outside of base64dec() so it makes sense to limit it's scope to the related function. the static-storage duration of the array is kept intact. this also removes unnecessary explicit zeroing from the start and end of the array. anything that wasn't explicitly zero-ed will now be implicitly zero-ed instead. the validity of the new array can be easily confirmed via running this trivial loop: for (int i = 0; i < 255; ++i) assert(base64_digits[i] == base64_digits_old[i]); lastly, as pointed out by Roberto, the array needs to have 256 elements in order to able access it as any unsigned char as an index; the previous array had 255. however, this array will only be accessed at indexes which are isprint() || '=' (see `base64dec_getc()`), so reducing the size of the array to the highest printable ascii char (127 AFAIK) + 1 might also be a valid strategy.
This commit is contained in:
		
							
								
								
									
										22
									
								
								st.c
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								st.c
									
									
									
									
									
								
							| @@ -349,21 +349,6 @@ utf8validate(Rune *u, size_t i) | |||||||
| 	return i; | 	return i; | ||||||
| } | } | ||||||
|  |  | ||||||
| static const char base64_digits[] = { |  | ||||||
| 	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |  | ||||||
| 	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, |  | ||||||
| 	63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 0, 0, 0, -1, 0, 0, 0, 0, 1, |  | ||||||
| 	2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, |  | ||||||
| 	22, 23, 24, 25, 0, 0, 0, 0, 0, 0, 26, 27, 28, 29, 30, 31, 32, 33, 34, |  | ||||||
| 	35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 0, |  | ||||||
| 	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |  | ||||||
| 	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |  | ||||||
| 	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |  | ||||||
| 	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |  | ||||||
| 	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |  | ||||||
| 	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| char | char | ||||||
| base64dec_getc(const char **src) | base64dec_getc(const char **src) | ||||||
| { | { | ||||||
| @@ -377,6 +362,13 @@ base64dec(const char *src) | |||||||
| { | { | ||||||
| 	size_t in_len = strlen(src); | 	size_t in_len = strlen(src); | ||||||
| 	char *result, *dst; | 	char *result, *dst; | ||||||
|  | 	static const char base64_digits[256] = { | ||||||
|  | 		[43] = 62, 0, 0, 0, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, | ||||||
|  | 		0, 0, 0, -1, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, | ||||||
|  | 		13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 0, 0, 0, 0, | ||||||
|  | 		0, 0, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, | ||||||
|  | 		40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51 | ||||||
|  | 	}; | ||||||
|  |  | ||||||
| 	if (in_len % 4) | 	if (in_len % 4) | ||||||
| 		in_len += 4 - (in_len % 4); | 		in_len += 4 - (in_len % 4); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user