in src/azure_base64.c [189:235]
BUFFER_HANDLE Azure_Base64_Decode(const char* source)
{
BUFFER_HANDLE result;
/*Codes_SRS_BASE64_06_008: [If source is NULL then Azure_Base64_Decode shall return NULL.]*/
if (source == NULL)
{
LogError("invalid parameter const char* source=%p", source);
result = NULL;
}
else
{
if ((strlen(source) % 4) != 0)
{
/*Codes_SRS_BASE64_06_011: [If the source string has an invalid length for a base 64 encoded string then Azure_Base64_Decode shall return NULL.]*/
LogError("Invalid length Base64 string!");
result = NULL;
}
else
{
if ((result = BUFFER_new()) == NULL)
{
/*Codes_SRS_BASE64_06_010: [If there is any memory allocation failure during the decode then Azure_Base64_Decode shall return NULL.]*/
LogError("Could not create a buffer to decoding.");
}
else
{
size_t sizeOfOutputBuffer = Base64decode_len(source);
/*Codes_SRS_BASE64_06_009: [If the string pointed to by source is zero length then the handle returned shall refer to a zero length buffer.]*/
if (sizeOfOutputBuffer > 0)
{
if (BUFFER_pre_build(result, sizeOfOutputBuffer) != 0)
{
/*Codes_SRS_BASE64_06_010: [If there is any memory allocation failure during the decode then Azure_Base64_Decode shall return NULL.]*/
LogError("Could not prebuild a buffer for base 64 decoding.");
BUFFER_delete(result);
result = NULL;
}
else
{
Base64decode(BUFFER_u_char(result), source);
}
}
}
}
}
return result;
}