-
Notifications
You must be signed in to change notification settings - Fork 6
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix signed integer oveflow which is UB and silencing other warnings #2
base: main
Are you sure you want to change the base?
Conversation
@@ -4,3 +4,4 @@ | |||
test | |||
*.d | |||
base45 | |||
.idea/ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nothing just prevent to push my ide folder
@@ -47,7 +47,7 @@ int base45_encode(char * dst, size_t *_max_dst_len, const unsigned char * src, s | |||
size_t out_len = 0, max_dst_len; | |||
max_dst_len = _max_dst_len ? *_max_dst_len : src_len * 4; | |||
|
|||
for(int i = 0; i < src_len; i+=2) { | |||
for(unsigned i = 0; i < src_len; i+=2) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
silencing warnings about different sign
@@ -101,19 +101,19 @@ int base45_decode(unsigned char * dst, size_t * _max_dst_len, const char * src, | |||
if (src_len == 0) | |||
src_len = strlen(src); | |||
|
|||
for(int i = 0; i < src_len; i+=3) { | |||
for(unsigned i = 0; i < src_len; i+=3) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
silencing warnings about different sign
|
||
if ((255 == (a = _C2I[src[i]])) || (255 == (b = _C2I[src[i+1]]))) | ||
if ((255 == (a = _C2I[(unsigned char)src[i]])) || (255 == (b = _C2I[(unsigned char)src[i+1]]))) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
unsigned integer overflow is well defined, so this cast silence other useless warnings
@@ -21,7 +21,7 @@ void check(char * in, char * out) { | |||
assert(0 == bcmp(dec,in,dlen)); | |||
|
|||
printf("base64(\"%s\") -> \"%s\"\n", (char*)dec, enc); | |||
}; | |||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
C standards doesn't allow ; after function definitions
@@ -30,4 +30,4 @@ int main(int argc, char **argv) { | |||
check("COVID-19","-M8*+A%R81A6"); | |||
check("2021 Digital Green Certificates for travel", | |||
"NF6OF6P34SED-EDAECS34ZKE1$CO345$CBWER.CGPC7WE.OEX.CBJEKWEKEC: C"); | |||
}; | |||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
C standards doesn't allow ; after function definitions
As you should know signed integer overflow is UB, apart from that I strongly suggest you enable at least the compiler warnings (
-Wall
and-Wextra
flags), i haven't looked for any other bugs.