Messages in this thread | | | Date | Sun, 8 Jan 2023 22:52:29 -0500 | From | Steven Rostedt <> | Subject | Re: [PATCH v2] tracing/eprobe: Replace snprintf with memcpy |
| |
On Mon, 9 Jan 2023 11:32:13 +0800 Quanfa Fu <quanfafu@gmail.com> wrote:
> @@ -923,17 +923,17 @@ static int trace_eprobe_parse_filter(struct trace_eprobe *ep, int argc, const ch > > p = ep->filter_str; > for (i = 0; i < argc; i++) { > - ret = snprintf(p, len, "%s ", argv[i]); > - if (ret < 0) > - goto error; > - if (ret > len) { > - ret = -E2BIG; > - goto error; > - } > - p += ret; > - len -= ret; > + arg_len = strlen(argv[i]); > + memcpy((void *)p, argv[i], arg_len); > + > + if (i == argc - 1) > + p[arg_len] = '\0'; > + else > + p[arg_len] = ' '; > + > + p += arg_len + 1; > + len -= arg_len + 1; > }
The above is too complex. I mentioned strncat() but you could still just keep snprintf() too, which adds the '\0';
for (i = 0; i < argc; i++) { if (i) ret = snprintf(p, len, " %s", argv[i]); else ret = snprintf(p, len, "%s", argv[i]); p += ret; len -= ret; }
-- Steve
> - p[-1] = '\0'; > > /* > * Ensure the filter string can be parsed correctly. Note, this
| |