An existing comment in the function being updated explains the problem:
* Many of the sscanf calls in this function use oversized destination
* fields because some sscanf() implementations truncate the range of %i
* directives, so that e.g. "%"SCNi16 interprets input of "0xfedc" as a
* value of 0x7fff. The other alternatives are to allow only a single
* radix (e.g. decimal or hexadecimal) or to write more sophisticated
* parsers.
---
lib/odp-util.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/lib/odp-util.c b/lib/odp-util.c
index b416380..00e4627 100644
--- a/lib/odp-util.c
+++ b/lib/odp-util.c
@@ -480,10 +480,10 @@ parse_odp_key_attr(const char *s, struct ofpbuf *key)
}
{
- uint16_t eth_type;
+ int eth_type;
int n = -1;
- if (sscanf(s, "eth_type(%"SCNi16")%n", ð_type, &n) > 0 && n > 0) {
+ if (sscanf(s, "eth_type(%i)%n", ð_type, &n) > 0 && n > 0) {
nl_msg_put_be16(key, ODP_KEY_ATTR_ETHERTYPE, htons(eth_type));
return n;
}
--
1.7.4.4
_______________________________________________
dev mailing list
[email protected]
http://openvswitch.org/mailman/listinfo/dev