/*
subnet_parse.c -- handle subnet parsing
- Copyright (C) 2000-2012 Guus Sliepen <guus@tinc-vpn.org>,
+ Copyright (C) 2000-2021 Guus Sliepen <guus@tinc-vpn.org>,
2000-2005 Ivo Timmermans
This program is free software; you can redistribute it and/or modify
}
int subnet_compare(const subnet_t *a, const subnet_t *b) {
- int result;
-
- result = a->type - b->type;
+ int result = (int)a->type - (int)b->type;
if(result) {
return result;
char *last_colon = strrchr(str, ':');
+ /* Check that the last colon is not further than possible in an IPv6 address */
+ if(last_colon >= str + 5 * 8) {
+ return false;
+ }
+
if(last_colon && sscanf(last_colon, ":%hu.%hu.%hu.%hu%n", &x[0], &x[1], &x[2], &x[3], &consumed) >= 4 && !last_colon[consumed]) {
/* Dotted quad suffix notation, convert to standard IPv6 notation */
for(int i = 0; i < 4; i++)