Wie der Titel bereits vermuten lässt, zeigt mir Valgrind einen Fehler an, welchen ich einfach nicht finde.
Here is what i wrote so far:
base64_decode:
Valgrind-log(via Command-line not Eclipse Plug-in)
Ich erwarte hier von keinem meinen code vollständig zu überarbeiten, ich möchte lediglich wissen warum ich den ersten fehler(und damit denke ich folgefehler) bekomme.
Mittlerweile sitze ich hier seit knappen 30stunden dran diesen fehler zu finden(-schlaf), habe auch schon verschiedene personen gefragt & es auch schon auf stackoverflow gepostet, wo mir aber keiner helfen konnte.
Here is what i wrote so far:
Code:
int login(char* input, int input_length){
//input = base64encoded user:pass
//decode data
//find username
//find pass
//hash pass
SHA1_CTX context;
uint8_t digest[20];
char* passlocation = NULL;
char* decoded = NULL;
char* username = NULL;
char* pass = NULL;
int temp = 0;
int login_status = -1;
int i = 0;
decoded = NULL;
if(input != NULL) {
decoded = base64_decode(input, input_length);
}
if(decoded == NULL){
return -1;
}
passlocation = strchr(decoded, ':'); //First Uninitalised error
if(passlocation) {
temp = strlen(input) - strlen(passlocation);
}
if(temp == 0 || temp == (input_length-1)){
return -1;
}
username = calloc(temp+1, sizeof(char));
strncpy(username, decoded, temp); //Second Uninitalised error
pass = calloc((input_length - temp), sizeof(char)); //Third Uninitalised error
strcpy(pass, (passlocation+1)); //inavlid read of size 1
if(username != NULL && pass != NULL){
printf("Username: %s\n", username); //Fourth Uninitalised error
printf("Password: %s\n", pass); //Invalid read of size 1
}
SHA1_Init(&context);
SHA1_Update(&context, (uint8_t *) pass, strlen(pass)); //invalid read of size 1
SHA1_Final(&context, digest);
login_status = identify_user(username, temp,(char*) digest);
clean_free(username);
clean_free(pass);
clean_free(decoded);
printf("%d\n",login_status);
return login_status;
}
base64_decode:
Code:
char* base64_decode(char* toDecode, int toDecode_length){
static char encoding_table[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f',
'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',
'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
'w', 'x', 'y', 'z', '0', '1', '2', '3',
'4', '5', '6', '7', '8', '9', '+', '/'};
char* i=toDecode;
char* decoded = calloc(256,sizeof(char));
int octets[24];
int s=6;
int sc=0;
int c=0;
int n=0;
int threechars=0;
int threecharC=0;
int decodeC;
int deLoop;
int expo=1;
int aValue;
char temp;
while(c<(toDecode_length)){ //länge des toDecode
n=0;
if(toDecode[c]!='='){
while(toDecode[c]!=encoding_table[n]){ //base64 char Wert ermitteln
n++;
}
for(sc=1;sc<7;sc++){ //base64 char Wert in binär
octets[s-sc]=n%2;
n=n/2;
}
for(sc=0;sc<6;sc++){ //Ausgabe des Binärwertes in Konsole (Debug)
//printf("%d",octets[s-6+sc]);
}
}else{
for(sc=1;sc<7;sc++){ //bei base64 wert '=' mit 0 füllen
octets[s-sc]=0;
}
}
s=s+6;
i++;
threechars++;
if(threechars==4){ //ermitteln des ascii wertes und schreiben in decoded
for(deLoop=8;deLoop<=24;deLoop=deLoop+8){
for(decodeC=1;decodeC<=8;decodeC++){
if(octets[deLoop-decodeC]==1){
aValue=aValue+expo;
}
expo=expo*2;
}
temp=aValue;
decoded[threecharC]=temp;
expo=1;
aValue=0;
threecharC++;
}
threechars=0;
s=6;
}
c++;
}
//printf("return value %d",n);
return decoded;
}
Ich erwarte hier von keinem meinen code vollständig zu überarbeiten, ich möchte lediglich wissen warum ich den ersten fehler(und damit denke ich folgefehler) bekomme.
Mittlerweile sitze ich hier seit knappen 30stunden dran diesen fehler zu finden(-schlaf), habe auch schon verschiedene personen gefragt & es auch schon auf stackoverflow gepostet, wo mir aber keiner helfen konnte.