mirror of
https://git.libssh.org/projects/libssh.git
synced 2025-11-30 13:01:23 +03:00
dh: Don't use strcat for ssh_get_hexa().
This is just hardening the code. Found by Coverity.
This commit is contained in:
17
src/dh.c
17
src/dh.c
@@ -251,23 +251,22 @@ void ssh_print_bignum(const char *which, bignum num) {
|
|||||||
* @see ssh_string_free_char()
|
* @see ssh_string_free_char()
|
||||||
*/
|
*/
|
||||||
char *ssh_get_hexa(const unsigned char *what, size_t len) {
|
char *ssh_get_hexa(const unsigned char *what, size_t len) {
|
||||||
char *hexa = NULL;
|
const char h[] = "0123456789abcdef";
|
||||||
|
char *hexa;
|
||||||
size_t i;
|
size_t i;
|
||||||
|
size_t hlen = len * 3;
|
||||||
|
|
||||||
hexa = malloc(len * 3 + 1);
|
hexa = malloc(hlen + 1);
|
||||||
if (hexa == NULL) {
|
if (hexa == NULL) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
ZERO_STRUCTP(hexa);
|
|
||||||
|
|
||||||
for (i = 0; i < len; i++) {
|
for (i = 0; i < len; i++) {
|
||||||
char hex[4];
|
hexa[i * 3] = h[(what[i] >> 4) & 0xF];
|
||||||
snprintf(hex, sizeof(hex), "%02x:", what[i]);
|
hexa[i * 3 + 1] = h[what[i] & 0xF];
|
||||||
strcat(hexa, hex);
|
hexa[i * 3 + 2] = ':';
|
||||||
}
|
}
|
||||||
|
hexa[hlen - 1] = '\0';
|
||||||
hexa[(len * 3) - 1] = '\0';
|
|
||||||
|
|
||||||
return hexa;
|
return hexa;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user