return NULL;
}
+/*
+ * Copy a filename
+ */
+static void copy_filename(char *dst, const char *src)
+{
+ size_t len = strlen(src);
+
+ if (len >= (size_t)FILENAME_MAX) {
+ report_error(ERR_FATAL | ERR_NOFILE, "file name too long");
+ return;
+ }
+ strncpy(dst, src, FILENAME_MAX);
+}
+
struct textargs {
const char *label;
int value;
break;
case 'o': /* output file */
- strcpy(outname, param);
+ copy_filename(outname, param);
break;
case 'f': /* output format */
break;
case 'l': /* listing file */
- strcpy(listname, param);
+ copy_filename(listname, param);
break;
case 'Z': /* error messages file */
if (*inname) {
report_error(ERR_NONFATAL | ERR_NOFILE | ERR_USAGE,
"more than one input file specified");
- } else
- strcpy(inname, p);
+ } else {
+ copy_filename(inname, p);
+ }
}
return advance;
prevarg[0] = '\0';
while (1) { /* Loop to handle all lines in file */
-
p = buffer;
while (1) { /* Loop to handle long lines */
q = fgets(p, bufsize - (p - buffer), rfile);
prevargsize += ARG_BUF_DELTA;
prevarg = nasm_realloc(prevarg, prevargsize);
}
- strcpy(prevarg, p);
+ strncpy(prevarg, p, prevargsize);
}
}