]> git.ipfire.org Git - thirdparty/libnl.git/commitdiff
Check length of provided address label
authorThomas Graf <tgr@lsx.localdomain>
Wed, 14 May 2008 21:08:06 +0000 (23:08 +0200)
committerThomas Graf <tgr@lsx.localdomain>
Wed, 14 May 2008 21:08:06 +0000 (23:08 +0200)
include/netlink/route/addr.h
lib/route/addr.c

index 9004ca039666fd4fc45e01ef763fe729b0058c71..a23907276360d7f4224f6b4528ae047292641df4 100644 (file)
@@ -42,7 +42,7 @@ extern int    rtnl_addr_delete(struct nl_handle *,
 extern char *  rtnl_addr_flags2str(int, char *, size_t);
 extern int     rtnl_addr_str2flags(const char *);
 
-extern void    rtnl_addr_set_label(struct rtnl_addr *, const char *);
+extern int     rtnl_addr_set_label(struct rtnl_addr *, const char *);
 extern char *  rtnl_addr_get_label(struct rtnl_addr *);
 
 extern void    rtnl_addr_set_ifindex(struct rtnl_addr *, int);
index 905dce2119319d759ca08766029ea6582fdeb82f..1edcd69f001a9d4f7e7fa3f2a113ea85d0217cb9 100644 (file)
@@ -850,10 +850,15 @@ int rtnl_addr_delete(struct nl_handle *handle, struct rtnl_addr *addr,
  * @{
  */
 
-void rtnl_addr_set_label(struct rtnl_addr *addr, const char *label)
+int rtnl_addr_set_label(struct rtnl_addr *addr, const char *label)
 {
-       strncpy(addr->a_label, label, sizeof(addr->a_label) - 1);
+       if (strlen(label) > sizeof(addr->a_label) - 1)
+               return -NLE_RANGE;
+
+       strcpy(addr->a_label, label);
        addr->ce_mask |= ADDR_ATTR_LABEL;
+
+       return 0;
 }
 
 char *rtnl_addr_get_label(struct rtnl_addr *addr)