Rename ipv6 parsing variables, introduce one new one
This way the names are more descriptive.
j was reused later on for calculation,
num_zero_groups is used instead.
Signed-off-by: Andrzej Kurek <andrzej.kurek@arm.com>
diff --git a/library/x509_crt.c b/library/x509_crt.c
index 58f7cc0..3c9d613 100644
--- a/library/x509_crt.c
+++ b/library/x509_crt.c
@@ -2570,52 +2570,58 @@
static int x509_inet_pton_ipv6(const char *src, void *dst)
{
- const unsigned char *v = (const unsigned char *) src;
- int i = 0, j, dc = -1;
+ const unsigned char *character = (const unsigned char *) src;
+ int num_groups = 0, num_digits, zero_group_start = -1;
uint16_t addr[8];
do {
/* note: allows excess leading 0's, e.g. 1:0002:3:... */
- uint16_t x = j = 0;
- for (uint8_t n; j < 4 && li_cton(*v, n); x <<= 4, x |= n, ++v, ++j) {
+ uint16_t group = num_digits = 0;
+ for (uint8_t digit; num_digits < 4 && li_cton(*character, digit);
+ group <<= 4, group |= digit, ++character, ++num_digits) {
;
}
- if (j != 0) {
- addr[i++] = MBEDTLS_IS_BIG_ENDIAN ? x : (x << 8) | (x >> 8);
- if (*v == '\0') {
+ if (num_digits != 0) {
+ addr[num_groups++] = MBEDTLS_IS_BIG_ENDIAN ? group : (group << 8) | (group >> 8);
+ if (*character == '\0') {
break;
- } else if (*v == '.' && (i != 0 || dc != -1) && (i < 7) &&
+ } else if (*character == '.' && (num_groups != 0 || zero_group_start != -1) &&
+ (num_groups < 7) &&
/* walk back to prior ':', then parse as IPv4-mapped */
- (*--v == ':' || *--v == ':' ||
- *--v == ':' || *--v == ':') &&
- x509_inet_pton_ipv4((const char *) ++v, addr + --i) == 0) {
- i += 2;
- v = (const unsigned char *) "";
+ (*--character == ':' || *--character == ':' ||
+ *--character == ':' || *--character == ':') &&
+ x509_inet_pton_ipv4((const char *) ++character, addr + --num_groups) == 0) {
+ num_groups += 2;
+ character = (const unsigned char *) "";
break;
- } else if (*v != ':') {
+ } else if (*character != ':') {
return -1;
}
} else {
- if (dc != -1 || *v != ':' || ((dc = i) == 0 && *++v != ':')) {
+ if (zero_group_start != -1 || *character != ':' ||
+ ((zero_group_start = num_groups) == 0 && *++character != ':')) {
return -1;
}
- if (v[1] == '\0') {
- ++v;
+ if (character[1] == '\0') {
+ ++character;
break;
}
}
- ++v;
- } while (i < 8);
- if ((dc != -1 ? i > 6 : i != 8) || *v != '\0') {
+ ++character;
+ } while (num_groups < 8);
+ if ((zero_group_start != -1 ? num_groups > 6 : num_groups != 8) || *character != '\0') {
return -1;
}
- if (dc != -1) {
- i -= dc;
- j = 8 - i - dc;
- if (i) {
- memmove(addr + dc + j, addr + dc, i * sizeof(*addr));
+ if (zero_group_start != -1) {
+ int num_zero_groups = 0;
+ num_groups -= zero_group_start;
+ num_zero_groups = 8 - num_groups - zero_group_start;
+ if (num_groups) {
+ memmove(addr + zero_group_start + num_zero_groups,
+ addr + zero_group_start,
+ num_groups * sizeof(*addr));
}
- memset(addr + dc, 0, j * sizeof(*addr));
+ memset(addr + zero_group_start, 0, num_zero_groups * sizeof(*addr));
}
memcpy(dst, addr, sizeof(addr));
return 0;