*: remove more sprintf()

Should be just a couple non-development, non-test occurrences of this
function left now.

Signed-off-by: Quentin Young <qlyoung@qlyoung.net>
This commit is contained in:
Quentin Young 2021-02-07 22:39:42 -05:00 committed by Quentin Young
parent 658186e8b6
commit 7533cad751
17 changed files with 143 additions and 100 deletions

View File

@ -616,7 +616,8 @@ void bgp_path_info_mpath_update(struct bgp_dest *dest,
all_paths_lb = false; all_paths_lb = false;
if (debug) { if (debug) {
bgp_path_info_path_with_addpath_rx_str( bgp_path_info_path_with_addpath_rx_str(
cur_mpath, path_buf); cur_mpath, path_buf,
sizeof(path_buf));
zlog_debug( zlog_debug(
"%pRN: %s is still multipath, cur count %d", "%pRN: %s is still multipath, cur count %d",
bgp_dest_to_rnode(dest), bgp_dest_to_rnode(dest),
@ -626,7 +627,8 @@ void bgp_path_info_mpath_update(struct bgp_dest *dest,
mpath_changed = 1; mpath_changed = 1;
if (debug) { if (debug) {
bgp_path_info_path_with_addpath_rx_str( bgp_path_info_path_with_addpath_rx_str(
cur_mpath, path_buf); cur_mpath, path_buf,
sizeof(path_buf));
zlog_debug( zlog_debug(
"%pRN: remove mpath %s nexthop %s, cur count %d", "%pRN: remove mpath %s nexthop %s, cur count %d",
bgp_dest_to_rnode(dest), bgp_dest_to_rnode(dest),
@ -660,7 +662,7 @@ void bgp_path_info_mpath_update(struct bgp_dest *dest,
mpath_changed = 1; mpath_changed = 1;
if (debug) { if (debug) {
bgp_path_info_path_with_addpath_rx_str( bgp_path_info_path_with_addpath_rx_str(
cur_mpath, path_buf); cur_mpath, path_buf, sizeof(path_buf));
zlog_debug( zlog_debug(
"%pRN: remove mpath %s nexthop %s, cur count %d", "%pRN: remove mpath %s nexthop %s, cur count %d",
bgp_dest_to_rnode(dest), path_buf, bgp_dest_to_rnode(dest), path_buf,
@ -710,7 +712,8 @@ void bgp_path_info_mpath_update(struct bgp_dest *dest,
all_paths_lb = false; all_paths_lb = false;
if (debug) { if (debug) {
bgp_path_info_path_with_addpath_rx_str( bgp_path_info_path_with_addpath_rx_str(
new_mpath, path_buf); new_mpath, path_buf,
sizeof(path_buf));
zlog_debug( zlog_debug(
"%pRN: add mpath %s nexthop %s, cur count %d", "%pRN: add mpath %s nexthop %s, cur count %d",
bgp_dest_to_rnode(dest), bgp_dest_to_rnode(dest),

View File

@ -519,13 +519,14 @@ static uint32_t bgp_med_value(struct attr *attr, struct bgp *bgp)
} }
} }
void bgp_path_info_path_with_addpath_rx_str(struct bgp_path_info *pi, char *buf) void bgp_path_info_path_with_addpath_rx_str(struct bgp_path_info *pi, char *buf,
size_t buf_len)
{ {
if (pi->addpath_rx_id) if (pi->addpath_rx_id)
sprintf(buf, "path %s (addpath rxid %d)", pi->peer->host, snprintf(buf, buf_len, "path %s (addpath rxid %d)",
pi->addpath_rx_id); pi->peer->host, pi->addpath_rx_id);
else else
sprintf(buf, "path %s", pi->peer->host); snprintf(buf, buf_len, "path %s", pi->peer->host);
} }
/* Compare two bgp route entity. If 'new' is preferable over 'exist' return 1. /* Compare two bgp route entity. If 'new' is preferable over 'exist' return 1.
@ -576,7 +577,8 @@ static int bgp_path_info_cmp(struct bgp *bgp, struct bgp_path_info *new,
} }
if (debug) if (debug)
bgp_path_info_path_with_addpath_rx_str(new, new_buf); bgp_path_info_path_with_addpath_rx_str(new, new_buf,
sizeof(new_buf));
if (exist == NULL) { if (exist == NULL) {
*reason = bgp_path_selection_first; *reason = bgp_path_selection_first;
@ -587,7 +589,8 @@ static int bgp_path_info_cmp(struct bgp *bgp, struct bgp_path_info *new,
} }
if (debug) { if (debug) {
bgp_path_info_path_with_addpath_rx_str(exist, exist_buf); bgp_path_info_path_with_addpath_rx_str(exist, exist_buf,
sizeof(exist_buf));
zlog_debug("%s: Comparing %s flags 0x%x with %s flags 0x%x", zlog_debug("%s: Comparing %s flags 0x%x with %s flags 0x%x",
pfx_buf, new_buf, new->flags, exist_buf, pfx_buf, new_buf, new->flags, exist_buf,
exist->flags); exist->flags);
@ -615,10 +618,10 @@ static int bgp_path_info_cmp(struct bgp *bgp, struct bgp_path_info *new,
prefix2str( prefix2str(
bgp_dest_get_prefix(new->net), pfx_buf, bgp_dest_get_prefix(new->net), pfx_buf,
sizeof(*pfx_buf) * PREFIX2STR_BUFFER); sizeof(*pfx_buf) * PREFIX2STR_BUFFER);
bgp_path_info_path_with_addpath_rx_str(new,
new_buf);
bgp_path_info_path_with_addpath_rx_str( bgp_path_info_path_with_addpath_rx_str(
exist, exist_buf); new, new_buf, sizeof(new_buf));
bgp_path_info_path_with_addpath_rx_str(
exist, exist_buf, sizeof(exist_buf));
} }
if (newattr->sticky && !existattr->sticky) { if (newattr->sticky && !existattr->sticky) {
@ -2342,7 +2345,7 @@ void bgp_best_selection(struct bgp *bgp, struct bgp_dest *dest,
if (debug) { if (debug) {
bgp_path_info_path_with_addpath_rx_str( bgp_path_info_path_with_addpath_rx_str(
new_select, path_buf); new_select, path_buf, sizeof(path_buf));
zlog_debug( zlog_debug(
"%pBD: %s is the bestpath from AS %u", "%pBD: %s is the bestpath from AS %u",
dest, path_buf, dest, path_buf,
@ -2416,8 +2419,8 @@ void bgp_best_selection(struct bgp *bgp, struct bgp_dest *dest,
*/ */
if (debug) { if (debug) {
if (new_select) if (new_select)
bgp_path_info_path_with_addpath_rx_str(new_select, bgp_path_info_path_with_addpath_rx_str(
path_buf); new_select, path_buf, sizeof(path_buf));
else else
snprintf(path_buf, sizeof(path_buf), "NONE"); snprintf(path_buf, sizeof(path_buf), "NONE");
zlog_debug( zlog_debug(
@ -2432,7 +2435,7 @@ void bgp_best_selection(struct bgp *bgp, struct bgp_dest *dest,
if (debug) if (debug)
bgp_path_info_path_with_addpath_rx_str( bgp_path_info_path_with_addpath_rx_str(
pi, path_buf); pi, path_buf, sizeof(path_buf));
if (pi == new_select) { if (pi == new_select) {
if (debug) if (debug)
@ -6383,7 +6386,8 @@ DEFPY_YANG (bgp_network, bgp_network_cmd,
int ret; int ret;
ret = netmask_str2prefix_str(address_str, netmask_str, ret = netmask_str2prefix_str(address_str, netmask_str,
addr_prefix_str); addr_prefix_str,
sizeof(addr_prefix_str));
if (!ret) { if (!ret) {
vty_out(vty, "%% Inconsistent address and mask\n"); vty_out(vty, "%% Inconsistent address and mask\n");
return CMD_WARNING_CONFIG_FAILED; return CMD_WARNING_CONFIG_FAILED;
@ -7774,7 +7778,8 @@ DEFPY_YANG(
char prefix_buf[PREFIX2STR_BUFFER]; char prefix_buf[PREFIX2STR_BUFFER];
if (addr_str) { if (addr_str) {
if (netmask_str2prefix_str(addr_str, mask_str, prefix_buf) if (netmask_str2prefix_str(addr_str, mask_str, prefix_buf,
sizeof(prefix_buf))
== 0) { == 0) {
vty_out(vty, "%% Inconsistent address and mask\n"); vty_out(vty, "%% Inconsistent address and mask\n");
return CMD_WARNING_CONFIG_FAILED; return CMD_WARNING_CONFIG_FAILED;
@ -14291,7 +14296,7 @@ DEFUN (clear_ip_bgp_dampening_address_mask,
char prefix_str[BUFSIZ]; char prefix_str[BUFSIZ];
ret = netmask_str2prefix_str(argv[idx_ipv4]->arg, argv[idx_ipv4_2]->arg, ret = netmask_str2prefix_str(argv[idx_ipv4]->arg, argv[idx_ipv4_2]->arg,
prefix_str); prefix_str, sizeof(prefix_str));
if (!ret) { if (!ret) {
vty_out(vty, "%% Inconsistent address and mask\n"); vty_out(vty, "%% Inconsistent address and mask\n");
return CMD_WARNING; return CMD_WARNING;

View File

@ -598,7 +598,7 @@ extern void bgp_path_info_set_flag(struct bgp_dest *dest,
extern void bgp_path_info_unset_flag(struct bgp_dest *dest, extern void bgp_path_info_unset_flag(struct bgp_dest *dest,
struct bgp_path_info *path, uint32_t flag); struct bgp_path_info *path, uint32_t flag);
extern void bgp_path_info_path_with_addpath_rx_str(struct bgp_path_info *pi, extern void bgp_path_info_path_with_addpath_rx_str(struct bgp_path_info *pi,
char *buf); char *buf, size_t buf_len);
extern int bgp_nlri_parse_ip(struct peer *, struct attr *, struct bgp_nlri *); extern int bgp_nlri_parse_ip(struct peer *, struct attr *, struct bgp_nlri *);

View File

@ -4315,13 +4315,15 @@ DEFUN (match_community,
int idx_comm_list = 2; int idx_comm_list = 2;
int ret; int ret;
char *argstr; char *argstr;
size_t argstr_len;
if (argc == 4) { if (argc == 4) {
argstr = XMALLOC(MTYPE_ROUTE_MAP_COMPILED, argstr_len = strlen(argv[idx_comm_list]->arg)
strlen(argv[idx_comm_list]->arg) + strlen("exact-match") + 2;
+ strlen("exact-match") + 2); argstr = XMALLOC(MTYPE_ROUTE_MAP_COMPILED, argstr_len);
sprintf(argstr, "%s exact-match", argv[idx_comm_list]->arg); snprintf(argstr, argstr_len, "%s exact-match",
argv[idx_comm_list]->arg);
} else } else
argstr = argv[idx_comm_list]->arg; argstr = argv[idx_comm_list]->arg;
@ -4362,13 +4364,15 @@ DEFUN (match_lcommunity,
int idx_lcomm_list = 2; int idx_lcomm_list = 2;
int ret; int ret;
char *argstr; char *argstr;
size_t argstr_len;
if (argc == 4) { if (argc == 4) {
argstr = XMALLOC(MTYPE_ROUTE_MAP_COMPILED, argstr_len = strlen(argv[idx_lcomm_list]->arg)
strlen(argv[idx_lcomm_list]->arg) + strlen("exact-match") + 2;
+ strlen("exact-match") + 2); argstr = XMALLOC(MTYPE_ROUTE_MAP_COMPILED, argstr_len);
sprintf(argstr, "%s exact-match", argv[idx_lcomm_list]->arg); snprintf(argstr, argstr_len, "%s exact-match",
argv[idx_lcomm_list]->arg);
} else } else
argstr = argv[idx_lcomm_list]->arg; argstr = argv[idx_lcomm_list]->arg;
@ -5252,6 +5256,7 @@ DEFUN (set_aggregator_as,
int ret; int ret;
struct in_addr address; struct in_addr address;
char *argstr; char *argstr;
size_t argstr_len;
ret = inet_aton(argv[idx_ipv4]->arg, &address); ret = inet_aton(argv[idx_ipv4]->arg, &address);
if (ret == 0) { if (ret == 0) {
@ -5259,11 +5264,12 @@ DEFUN (set_aggregator_as,
return CMD_WARNING_CONFIG_FAILED; return CMD_WARNING_CONFIG_FAILED;
} }
argstr = XMALLOC(MTYPE_ROUTE_MAP_COMPILED, argstr_len =
strlen(argv[idx_number]->arg) strlen(argv[idx_number]->arg) + strlen(argv[idx_ipv4]->arg) + 2;
+ strlen(argv[idx_ipv4]->arg) + 2); argstr = XMALLOC(MTYPE_ROUTE_MAP_COMPILED, argstr_len);
sprintf(argstr, "%s %s", argv[idx_number]->arg, argv[idx_ipv4]->arg); snprintf(argstr, argstr_len, "%s %s", argv[idx_number]->arg,
argv[idx_ipv4]->arg);
ret = generic_set_add(vty, VTY_GET_CONTEXT(route_map_index), ret = generic_set_add(vty, VTY_GET_CONTEXT(route_map_index),
"aggregator as", argstr); "aggregator as", argstr);
@ -5289,6 +5295,7 @@ DEFUN (no_set_aggregator_as,
int ret; int ret;
struct in_addr address; struct in_addr address;
char *argstr; char *argstr;
size_t argstr_len;
if (argc <= idx_asn) if (argc <= idx_asn)
return generic_set_delete(vty, VTY_GET_CONTEXT(route_map_index), return generic_set_delete(vty, VTY_GET_CONTEXT(route_map_index),
@ -5300,11 +5307,11 @@ DEFUN (no_set_aggregator_as,
return CMD_WARNING_CONFIG_FAILED; return CMD_WARNING_CONFIG_FAILED;
} }
argstr = XMALLOC(MTYPE_ROUTE_MAP_COMPILED, argstr_len = strlen(argv[idx_asn]->arg) + strlen(argv[idx_ip]->arg) + 2;
strlen(argv[idx_asn]->arg) + strlen(argv[idx_ip]->arg) argstr = XMALLOC(MTYPE_ROUTE_MAP_COMPILED, argstr_len);
+ 2);
sprintf(argstr, "%s %s", argv[idx_asn]->arg, argv[idx_ip]->arg); snprintf(argstr, argstr_len, "%s %s", argv[idx_asn]->arg,
argv[idx_ip]->arg);
ret = generic_set_delete(vty, VTY_GET_CONTEXT(route_map_index), ret = generic_set_delete(vty, VTY_GET_CONTEXT(route_map_index),
"aggregator as", argstr); "aggregator as", argstr);

View File

@ -563,7 +563,7 @@ In general, code submitted into FRR will be rejected if it uses unsafe
programming practices. While there is no enforced overall ruleset, the programming practices. While there is no enforced overall ruleset, the
following requirements have achieved consensus: following requirements have achieved consensus:
- ``strcpy``, ``strcat`` and ``sprintf`` are inacceptable without exception. - ``strcpy``, ``strcat`` and ``sprintf`` are unacceptable without exception.
Use ``strlcpy``, ``strlcat`` and ``snprintf`` instead. (Rationale: even if Use ``strlcpy``, ``strlcat`` and ``snprintf`` instead. (Rationale: even if
you know the operation cannot overflow the buffer, a future code change may you know the operation cannot overflow the buffer, a future code change may
inadvertedly introduce an overflow.) inadvertedly introduce an overflow.)

View File

@ -691,8 +691,8 @@ static void lsp_set_time(struct isis_lsp *lsp)
stream_putw_at(lsp->pdu, 10, lsp->hdr.rem_lifetime); stream_putw_at(lsp->pdu, 10, lsp->hdr.rem_lifetime);
} }
void lspid_print(uint8_t *lsp_id, char *dest, char dynhost, char frag, void lspid_print(uint8_t *lsp_id, char *dest, size_t dest_len, char dynhost,
struct isis *isis) char frag, struct isis *isis)
{ {
struct isis_dynhn *dyn = NULL; struct isis_dynhn *dyn = NULL;
char id[SYSID_STRLEN]; char id[SYSID_STRLEN];
@ -710,10 +710,10 @@ void lspid_print(uint8_t *lsp_id, char *dest, char dynhost, char frag,
memcpy(id, sysid_print(lsp_id), 15); memcpy(id, sysid_print(lsp_id), 15);
if (frag) if (frag)
sprintf(dest, "%s.%02x-%02x", id, LSP_PSEUDO_ID(lsp_id), snprintf(dest, dest_len, "%s.%02x-%02x", id,
LSP_FRAGMENT(lsp_id)); LSP_PSEUDO_ID(lsp_id), LSP_FRAGMENT(lsp_id));
else else
sprintf(dest, "%s.%02x", id, LSP_PSEUDO_ID(lsp_id)); snprintf(dest, dest_len, "%s.%02x", id, LSP_PSEUDO_ID(lsp_id));
} }
/* Convert the lsp attribute bits to attribute string */ /* Convert the lsp attribute bits to attribute string */
@ -747,7 +747,7 @@ void lsp_print(struct isis_lsp *lsp, struct vty *vty, char dynhost,
char age_out[8]; char age_out[8];
char b[200]; char b[200];
lspid_print(lsp->hdr.lsp_id, LSPid, dynhost, 1, isis); lspid_print(lsp->hdr.lsp_id, LSPid, sizeof(LSPid), dynhost, 1, isis);
vty_out(vty, "%-21s%c ", LSPid, lsp->own_lsp ? '*' : ' '); vty_out(vty, "%-21s%c ", LSPid, lsp->own_lsp ? '*' : ' ');
vty_out(vty, "%5hu ", lsp->hdr.pdu_len); vty_out(vty, "%5hu ", lsp->hdr.pdu_len);
vty_out(vty, "0x%08x ", lsp->hdr.seqno); vty_out(vty, "0x%08x ", lsp->hdr.seqno);

View File

@ -116,8 +116,8 @@ void lsp_update(struct isis_lsp *lsp, struct isis_lsp_hdr *hdr,
struct isis_tlvs *tlvs, struct stream *stream, struct isis_tlvs *tlvs, struct stream *stream,
struct isis_area *area, int level, bool confusion); struct isis_area *area, int level, bool confusion);
void lsp_inc_seqno(struct isis_lsp *lsp, uint32_t seqno); void lsp_inc_seqno(struct isis_lsp *lsp, uint32_t seqno);
void lspid_print(uint8_t *lsp_id, char *dest, char dynhost, char frag, void lspid_print(uint8_t *lsp_id, char *dest, size_t dest_len, char dynhost,
struct isis *isis); char frag, struct isis *isis);
void lsp_print(struct isis_lsp *lsp, struct vty *vty, char dynhost, void lsp_print(struct isis_lsp *lsp, struct vty *vty, char dynhost,
struct isis *isis); struct isis *isis);
void lsp_print_detail(struct isis_lsp *lsp, struct vty *vty, char dynhost, void lsp_print_detail(struct isis_lsp *lsp, struct vty *vty, char dynhost,

View File

@ -59,27 +59,30 @@ char nlpidstring[30];
const char *isonet_print(const uint8_t *from, int len) const char *isonet_print(const uint8_t *from, int len)
{ {
int i = 0; int i = 0;
char *pos = isonet; char tbuf[4];
isonet[0] = '\0';
if (!from) if (!from)
return "unknown"; return "unknown";
while (i < len) { while (i < len) {
if (i & 1) { if (i & 1) {
sprintf(pos, "%02x", *(from + i)); snprintf(tbuf, sizeof(tbuf), "%02x", *(from + i));
pos += 2; strlcat(isonet, tbuf, sizeof(isonet));
} else { } else {
if (i == (len - 1)) { /* No dot at the end of address */ if (i == (len - 1)) { /* No dot at the end of address */
sprintf(pos, "%02x", *(from + i)); snprintf(tbuf, sizeof(tbuf), "%02x",
pos += 2; *(from + i));
strlcat(isonet, tbuf, sizeof(isonet));
} else { } else {
sprintf(pos, "%02x.", *(from + i)); snprintf(tbuf, sizeof(tbuf), "%02x.",
pos += 3; *(from + i));
strlcat(isonet, tbuf, sizeof(isonet));
} }
} }
i++; i++;
} }
*(pos) = '\0';
return isonet; return isonet;
} }
@ -202,17 +205,18 @@ const char *nlpid2str(uint8_t nlpid)
char *nlpid2string(struct nlpids *nlpids) char *nlpid2string(struct nlpids *nlpids)
{ {
char *pos = nlpidstring;
int i; int i;
char tbuf[256];
nlpidstring[0] = '\0';
for (i = 0; i < nlpids->count; i++) { for (i = 0; i < nlpids->count; i++) {
pos += sprintf(pos, "%s", nlpid2str(nlpids->nlpids[i])); snprintf(tbuf, sizeof(tbuf), "%s",
nlpid2str(nlpids->nlpids[i]));
strlcat(nlpidstring, tbuf, sizeof(nlpidstring));
if (nlpids->count - i > 1) if (nlpids->count - i > 1)
pos += sprintf(pos, ", "); strlcat(nlpidstring, ", ", sizeof(nlpidstring));
} }
*(pos) = '\0';
return nlpidstring; return nlpidstring;
} }
@ -359,34 +363,47 @@ const char *isis_format_id(const uint8_t *id, size_t len)
const char *time2string(uint32_t time) const char *time2string(uint32_t time)
{ {
char *pos = datestring;
uint32_t rest; uint32_t rest;
char tbuf[32];
datestring[0] = '\0';
if (time == 0) if (time == 0)
return "-"; return "-";
if (time / SECS_PER_YEAR) if (time / SECS_PER_YEAR) {
pos += sprintf(pos, "%uY", time / SECS_PER_YEAR); snprintf(tbuf, sizeof(tbuf), "%uY", time / SECS_PER_YEAR);
strlcat(datestring, tbuf, sizeof(datestring));
}
rest = time % SECS_PER_YEAR; rest = time % SECS_PER_YEAR;
if (rest / SECS_PER_MONTH) if (rest / SECS_PER_MONTH) {
pos += sprintf(pos, "%uM", rest / SECS_PER_MONTH); snprintf(tbuf, sizeof(tbuf), "%uM", rest / SECS_PER_MONTH);
strlcat(datestring, tbuf, sizeof(datestring));
}
rest = rest % SECS_PER_MONTH; rest = rest % SECS_PER_MONTH;
if (rest / SECS_PER_WEEK) if (rest / SECS_PER_WEEK) {
pos += sprintf(pos, "%uw", rest / SECS_PER_WEEK); snprintf(tbuf, sizeof(tbuf), "%uw", rest / SECS_PER_WEEK);
strlcat(datestring, tbuf, sizeof(datestring));
}
rest = rest % SECS_PER_WEEK; rest = rest % SECS_PER_WEEK;
if (rest / SECS_PER_DAY) if (rest / SECS_PER_DAY) {
pos += sprintf(pos, "%ud", rest / SECS_PER_DAY); snprintf(tbuf, sizeof(tbuf), "%ud", rest / SECS_PER_DAY);
strlcat(datestring, tbuf, sizeof(datestring));
}
rest = rest % SECS_PER_DAY; rest = rest % SECS_PER_DAY;
if (rest / SECS_PER_HOUR) if (rest / SECS_PER_HOUR) {
pos += sprintf(pos, "%uh", rest / SECS_PER_HOUR); snprintf(tbuf, sizeof(tbuf), "%uh", rest / SECS_PER_HOUR);
strlcat(datestring, tbuf, sizeof(datestring));
}
rest = rest % SECS_PER_HOUR; rest = rest % SECS_PER_HOUR;
if (rest / SECS_PER_MINUTE) if (rest / SECS_PER_MINUTE) {
pos += sprintf(pos, "%um", rest / SECS_PER_MINUTE); snprintf(tbuf, sizeof(tbuf), "%um", rest / SECS_PER_MINUTE);
strlcat(datestring, tbuf, sizeof(datestring));
}
rest = rest % SECS_PER_MINUTE; rest = rest % SECS_PER_MINUTE;
if (rest) if (rest) {
pos += sprintf(pos, "%us", rest); snprintf(tbuf, sizeof(tbuf), "%us", rest);
strlcat(datestring, tbuf, sizeof(datestring));
*(pos) = 0; }
return datestring; return datestring;
} }

View File

@ -118,7 +118,7 @@ static void lsp_print_flooding(struct vty *vty, struct isis_lsp *lsp,
char lspid[255]; char lspid[255];
char buf[MONOTIME_STRLEN]; char buf[MONOTIME_STRLEN];
lspid_print(lsp->hdr.lsp_id, lspid, true, true, isis); lspid_print(lsp->hdr.lsp_id, lspid, sizeof(lspid), true, true, isis);
vty_out(vty, "Flooding information for %s\n", lspid); vty_out(vty, "Flooding information for %s\n", lspid);
if (!lsp->flooding_neighbors[TX_LSP_NORMAL]) { if (!lsp->flooding_neighbors[TX_LSP_NORMAL]) {

View File

@ -1160,7 +1160,7 @@ in_addr_t ipv4_broadcast_addr(in_addr_t hostaddr, int masklen)
ex.) "1.1.0.0" "255.255.0.0" => "1.1.0.0/16" ex.) "1.1.0.0" "255.255.0.0" => "1.1.0.0/16"
ex.) "1.0.0.0" NULL => "1.0.0.0/8" */ ex.) "1.0.0.0" NULL => "1.0.0.0/8" */
int netmask_str2prefix_str(const char *net_str, const char *mask_str, int netmask_str2prefix_str(const char *net_str, const char *mask_str,
char *prefix_str) char *prefix_str, size_t prefix_str_len)
{ {
struct in_addr network; struct in_addr network;
struct in_addr mask; struct in_addr mask;
@ -1193,7 +1193,7 @@ int netmask_str2prefix_str(const char *net_str, const char *mask_str,
return 0; return 0;
} }
sprintf(prefix_str, "%s/%d", net_str, prefixlen); snprintf(prefix_str, prefix_str_len, "%s/%d", net_str, prefixlen);
return 1; return 1;
} }

View File

@ -491,7 +491,7 @@ extern void masklen2ip(const int, struct in_addr *);
* special treatment for /31 according to RFC3021 section 3.3 */ * special treatment for /31 according to RFC3021 section 3.3 */
extern in_addr_t ipv4_broadcast_addr(in_addr_t hostaddr, int masklen); extern in_addr_t ipv4_broadcast_addr(in_addr_t hostaddr, int masklen);
extern int netmask_str2prefix_str(const char *, const char *, char *); extern int netmask_str2prefix_str(const char *, const char *, char *, size_t);
extern struct prefix_ipv6 *prefix_ipv6_new(void); extern struct prefix_ipv6 *prefix_ipv6_new(void);
extern void prefix_ipv6_free(struct prefix_ipv6 **p); extern void prefix_ipv6_free(struct prefix_ipv6 **p);

View File

@ -2414,9 +2414,9 @@ bool vty_read_config(struct nb_config *config, const char *config_file,
__func__, errno); __func__, errno);
goto tmp_free_and_out; goto tmp_free_and_out;
} }
tmp = XMALLOC(MTYPE_TMP, size_t tmp_len = strlen(cwd) + strlen(config_file) + 2;
strlen(cwd) + strlen(config_file) + 2); tmp = XMALLOC(MTYPE_TMP, tmp_len);
sprintf(tmp, "%s/%s", cwd, config_file); snprintf(tmp, tmp_len, "%s/%s", cwd, config_file);
fullpath = tmp; fullpath = tmp;
} else } else
fullpath = config_file; fullpath = config_file;

View File

@ -1265,6 +1265,7 @@ static char *ospf6_inter_area_prefix_lsa_get_prefix_str(struct ospf6_lsa *lsa,
{ {
struct ospf6_inter_prefix_lsa *prefix_lsa; struct ospf6_inter_prefix_lsa *prefix_lsa;
struct in6_addr in6; struct in6_addr in6;
char tbuf[16];
if (lsa != NULL) { if (lsa != NULL) {
prefix_lsa = prefix_lsa =
@ -1274,8 +1275,9 @@ static char *ospf6_inter_area_prefix_lsa_get_prefix_str(struct ospf6_lsa *lsa,
ospf6_prefix_in6_addr(&in6, prefix_lsa, &prefix_lsa->prefix); ospf6_prefix_in6_addr(&in6, prefix_lsa, &prefix_lsa->prefix);
if (buf) { if (buf) {
inet_ntop(AF_INET6, &in6, buf, buflen); inet_ntop(AF_INET6, &in6, buf, buflen);
sprintf(&buf[strlen(buf)], "/%d", snprintf(tbuf, sizeof(tbuf), "/%d",
prefix_lsa->prefix.prefix_length); prefix_lsa->prefix.prefix_length);
strlcat(buf, tbuf, buflen);
} }
} }

View File

@ -1865,6 +1865,7 @@ static char *ospf6_as_external_lsa_get_prefix_str(struct ospf6_lsa *lsa,
struct ospf6_as_external_lsa *external; struct ospf6_as_external_lsa *external;
struct in6_addr in6; struct in6_addr in6;
int prefix_length = 0; int prefix_length = 0;
char tbuf[16];
if (lsa) { if (lsa) {
external = (struct ospf6_as_external_lsa *)OSPF6_LSA_HEADER_END( external = (struct ospf6_as_external_lsa *)OSPF6_LSA_HEADER_END(
@ -1885,9 +1886,11 @@ static char *ospf6_as_external_lsa_get_prefix_str(struct ospf6_lsa *lsa,
} }
if (buf) { if (buf) {
inet_ntop(AF_INET6, &in6, buf, buflen); inet_ntop(AF_INET6, &in6, buf, buflen);
if (prefix_length) if (prefix_length) {
sprintf(&buf[strlen(buf)], "/%d", snprintf(tbuf, sizeof(tbuf), "/%d",
prefix_length); prefix_length);
strlcat(buf, tbuf, buflen);
}
} }
} }
return (buf); return (buf);

View File

@ -83,7 +83,7 @@ static char *ospf6_router_lsa_get_nbr_id(struct ospf6_lsa *lsa, char *buf,
sizeof(buf1)); sizeof(buf1));
inet_ntop(AF_INET, &lsdesc->neighbor_router_id, inet_ntop(AF_INET, &lsdesc->neighbor_router_id,
buf2, sizeof(buf2)); buf2, sizeof(buf2));
sprintf(buf, "%s/%s", buf2, buf1); snprintf(buf, buflen, "%s/%s", buf2, buf1);
return buf; return buf;
} }
@ -865,6 +865,7 @@ static char *ospf6_intra_prefix_lsa_get_prefix_str(struct ospf6_lsa *lsa,
struct in6_addr in6; struct in6_addr in6;
int prefixnum, cnt = 0; int prefixnum, cnt = 0;
struct ospf6_prefix *prefix; struct ospf6_prefix *prefix;
char tbuf[16];
if (lsa) { if (lsa) {
intra_prefix_lsa = intra_prefix_lsa =
@ -897,8 +898,9 @@ static char *ospf6_intra_prefix_lsa_get_prefix_str(struct ospf6_lsa *lsa,
OSPF6_PREFIX_SPACE( OSPF6_PREFIX_SPACE(
prefix->prefix_length)); prefix->prefix_length));
inet_ntop(AF_INET6, &in6, buf, buflen); inet_ntop(AF_INET6, &in6, buf, buflen);
sprintf(&buf[strlen(buf)], "/%d", snprintf(tbuf, sizeof(tbuf), "/%d",
prefix->prefix_length); prefix->prefix_length);
strlcat(buf, tbuf, buflen);
return (buf); return (buf);
} }
} while (current <= end); } while (current <= end);

View File

@ -93,10 +93,10 @@ static int irdp_if_delete(struct interface *ifp)
return 0; return 0;
} }
static const char *inet_2a(uint32_t a, char *b) static const char *inet_2a(uint32_t a, char *b, size_t b_len)
{ {
sprintf(b, "%u.%u.%u.%u", (a)&0xFF, (a >> 8) & 0xFF, (a >> 16) & 0xFF, snprintf(b, b_len, "%u.%u.%u.%u", (a)&0xFF, (a >> 8) & 0xFF,
(a >> 24) & 0xFF); (a >> 16) & 0xFF, (a >> 24) & 0xFF);
return b; return b;
} }
@ -140,7 +140,8 @@ static int if_group(struct interface *ifp, int sock, uint32_t group,
flog_err_sys(EC_LIB_SOCKET, "IRDP: %s can't setsockopt %s: %s", flog_err_sys(EC_LIB_SOCKET, "IRDP: %s can't setsockopt %s: %s",
add_leave == IP_ADD_MEMBERSHIP ? "join group" add_leave == IP_ADD_MEMBERSHIP ? "join group"
: "leave group", : "leave group",
inet_2a(group, b1), safe_strerror(errno)); inet_2a(group, b1, sizeof(b1)),
safe_strerror(errno));
return ret; return ret;
} }
@ -162,7 +163,8 @@ static int if_add_group(struct interface *ifp)
if (irdp->flags & IF_DEBUG_MISC) if (irdp->flags & IF_DEBUG_MISC)
zlog_debug("IRDP: Adding group %s for %s", zlog_debug("IRDP: Adding group %s for %s",
inet_2a(htonl(INADDR_ALLRTRS_GROUP), b1), ifp->name); inet_2a(htonl(INADDR_ALLRTRS_GROUP), b1, sizeof(b1)),
ifp->name);
return 0; return 0;
} }
@ -183,7 +185,8 @@ static int if_drop_group(struct interface *ifp)
if (irdp->flags & IF_DEBUG_MISC) if (irdp->flags & IF_DEBUG_MISC)
zlog_debug("IRDP: Leaving group %s for %s", zlog_debug("IRDP: Leaving group %s for %s",
inet_2a(htonl(INADDR_ALLRTRS_GROUP), b1), ifp->name); inet_2a(htonl(INADDR_ALLRTRS_GROUP), b1, sizeof(b1)),
ifp->name);
return 0; return 0;
} }
@ -383,7 +386,8 @@ int irdp_config_write(struct vty *vty, struct interface *ifp)
for (ALL_LIST_ELEMENTS_RO(irdp->AdvPrefList, node, adv)) for (ALL_LIST_ELEMENTS_RO(irdp->AdvPrefList, node, adv))
vty_out(vty, " ip irdp address %s preference %d\n", vty_out(vty, " ip irdp address %s preference %d\n",
inet_2a(adv->ip.s_addr, b1), adv->pref); inet_2a(adv->ip.s_addr, b1, sizeof(b1)),
adv->pref);
vty_out(vty, " ip irdp holdtime %d\n", irdp->Lifetime); vty_out(vty, " ip irdp holdtime %d\n", irdp->Lifetime);

View File

@ -1132,8 +1132,8 @@ static int build_label_stack(struct mpls_label_stack *nh_label,
if (IS_ZEBRA_DEBUG_KERNEL) { if (IS_ZEBRA_DEBUG_KERNEL) {
if (!num_labels) if (!num_labels)
sprintf(label_buf, "label %u", snprintf(label_buf, label_buf_size, "label %u",
nh_label->label[i]); nh_label->label[i]);
else { else {
snprintf(label_buf1, sizeof(label_buf1), "/%u", snprintf(label_buf1, sizeof(label_buf1), "/%u",
nh_label->label[i]); nh_label->label[i]);