Skip to content

Commit dbcabb0

Browse files
committed
Use snprintf() value to avoid strlen() in a loop
1 parent e75bc73 commit dbcabb0

File tree

1 file changed

+6
-8
lines changed

1 file changed

+6
-8
lines changed

src/fmelt.c

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -202,15 +202,13 @@ SEXP uniq_diff(SEXP int_or_list, int ncol, bool is_measure) {
202202
}
203203

204204
if (invalid_count > 0) {
205-
char buffer[4096] = "";
205+
char buffer[4096] = "", *nexti = buffer;
206+
size_t remaining = sizeof buffer;
206207
for (int i = 0; i < invalid_count; ++i) {
207-
char temp[32];
208-
snprintf(temp, 32, "[%d]", invalid_col_ptr[i]);
209-
210-
if (i > 0) {
211-
strncat(buffer, ", ", sizeof(buffer) - strlen(buffer) - 1);
212-
}
213-
strncat(buffer, temp, sizeof(buffer) - strlen(buffer) - 1);
208+
int offset = snprintf(nexti, remaining, "%s[%d]", i > 0 ? ", " : "", invalid_col_ptr[i]);
209+
if (offset < 0 || (size_t)offset >= remaining) break;
210+
nexti += offset;
211+
remaining -= offset;
214212
}
215213

216214
error(_("One or more values in '%s' are invalid; please fix by removing: %s"),

0 commit comments

Comments
 (0)