summaryrefslogtreecommitdiff
path: root/ext/standard/base64.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/standard/base64.c')
-rw-r--r--ext/standard/base64.c23
1 files changed, 4 insertions, 19 deletions
diff --git a/ext/standard/base64.c b/ext/standard/base64.c
index d0a565fde4..70675d14e3 100644
--- a/ext/standard/base64.c
+++ b/ext/standard/base64.c
@@ -71,24 +71,8 @@ unsigned char *_php3_base64_encode(const unsigned char *string, int length, int
unsigned char *_php3_base64_decode(const unsigned char *string, int length, int *ret_length) {
const unsigned char *current = string;
int ch, i = 0, j = 0, k;
- /* this sucks for threaded environments */
- static short reverse_table[256];
- static int table_built;
- unsigned char *result;
-
- if (++table_built == 1) {
- char *chp;
- for(ch = 0; ch < 256; ch++) {
- chp = strchr(base64_table, ch);
- if(chp) {
- reverse_table[ch] = chp - base64_table;
- } else {
- reverse_table[ch] = -1;
- }
- }
- }
- result = (unsigned char *)emalloc((length / 4 * 3 + 1) * sizeof(char));
+ unsigned char *result = (unsigned char *)emalloc((length / 4 * 3 + 1) * sizeof(char));
if (result == NULL) {
return NULL;
}
@@ -96,8 +80,9 @@ unsigned char *_php3_base64_decode(const unsigned char *string, int length, int
/* run through the whole string, converting as we go */
while ((ch = *current++) != '\0') {
if (ch == base64_pad) break;
- ch = reverse_table[ch];
- if (ch < 0) continue;
+ ch = (int)strchr(base64_table, ch);
+ if (ch == 0) continue;
+ ch -= (int)base64_table;
switch(i % 4) {
case 0: