From fb3ef5c32192b994fb62352716eee8fb2d70c697 Mon Sep 17 00:00:00 2001 From: "Christopher J. Brody" Date: Wed, 14 Jul 2021 14:38:28 -0400 Subject: [PATCH] fix: apply quick workaround for Android NDK to avoid an issue due to some lossy casting as needed for armeabi-v7a (32-bit) & arm64-v8a (not needed for x86 32-bit or 64-bit) as proposed for libb64 in: - https://github.com/gorb314/libb64/pull/4 --- cdecode.c | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/cdecode.c b/cdecode.c index 5e5f588..76eb1db 100644 --- a/cdecode.c +++ b/cdecode.c @@ -26,6 +26,7 @@ int base64_decode_block(const char* code_in, const int length_in, char* plaintex { const char* codechar = code_in; char* plainchar = plaintext_out; + int value; char fragment; *plainchar = state_in->plainchar; @@ -42,8 +43,9 @@ int base64_decode_block(const char* code_in, const int length_in, char* plaintex state_in->plainchar = *plainchar; return plainchar - plaintext_out; } - fragment = (char)base64_decode_value(*codechar++); - } while (fragment < 0); + value = base64_decode_value(*codechar++); + fragment = (char)value; + } while (value < 0); *plainchar = (fragment & 0x03f) << 2; case step_b: do { @@ -53,8 +55,9 @@ int base64_decode_block(const char* code_in, const int length_in, char* plaintex state_in->plainchar = *plainchar; return plainchar - plaintext_out; } - fragment = (char)base64_decode_value(*codechar++); - } while (fragment < 0); + value = base64_decode_value(*codechar++); + fragment = (char)value; + } while (value < 0); *plainchar++ |= (fragment & 0x030) >> 4; *plainchar = (fragment & 0x00f) << 4; case step_c: @@ -65,8 +68,9 @@ int base64_decode_block(const char* code_in, const int length_in, char* plaintex state_in->plainchar = *plainchar; return plainchar - plaintext_out; } - fragment = (char)base64_decode_value(*codechar++); - } while (fragment < 0); + value = base64_decode_value(*codechar++); + fragment = (char)value; + } while (value < 0); *plainchar++ |= (fragment & 0x03c) >> 2; *plainchar = (fragment & 0x003) << 6; case step_d: @@ -77,8 +81,9 @@ int base64_decode_block(const char* code_in, const int length_in, char* plaintex state_in->plainchar = *plainchar; return plainchar - plaintext_out; } - fragment = (char)base64_decode_value(*codechar++); - } while (fragment < 0); + value = base64_decode_value(*codechar++); + fragment = (char)value; + } while (value < 0); *plainchar++ |= (fragment & 0x03f); } }