Skip to content

Commit 822964f

Browse files
committed
Apply changes from maintainer's commit dbcabb0 to avoid repeated strncat() calls
1 parent ea98c19 commit 822964f

File tree

1 file changed

+6
-7
lines changed

1 file changed

+6
-7
lines changed

src/fmelt.c

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -193,14 +193,13 @@ SEXP uniq_diff(SEXP int_or_list, int ncol, bool is_measure) {
193193
}
194194
}
195195
if (invalid_count > 0) {
196-
char buffer[4096] = "";
196+
char buffer[4096] = "", *nexti = buffer;
197+
size_t remaining = sizeof buffer;
197198
for (int i = 0; i < invalid_count; ++i) {
198-
char temp[32];
199-
snprintf(temp, 32, "[%d]", invalid_col_ptr[i]);
200-
if (i > 0) {
201-
strncat(buffer, ", ", sizeof(buffer) - strlen(buffer) - 1);
202-
}
203-
strncat(buffer, temp, sizeof(buffer) - strlen(buffer) - 1);
199+
int offset = snprintf(nexti, remaining, "%s[%d]", i > 0 ? ", " : "", invalid_col_ptr[i]);
200+
if (offset < 0 || (size_t)offset >= remaining) break;
201+
nexti += offset;
202+
remaining -= offset;
204203
}
205204
error(_("One or more values in '%s' are invalid; please fix by removing: %s"),
206205
is_measure ? "measure.vars" : "id.vars", buffer);

0 commit comments

Comments
 (0)