diff -ur bc-stage/usr/src/cmd/abi/spectrans/parser/extends.c bc/usr/src/cmd/abi/spectrans/parser/extends.c --- bc-stage/usr/src/cmd/abi/spectrans/parser/extends.c Sat Jul 16 23:31:23 2005 +++ bc/usr/src/cmd/abi/spectrans/parser/extends.c Sat Jul 16 23:18:54 2005 @@ -38,6 +38,15 @@ static int find_fun(char *key, char *value, char *parentfun); /* + * Macros to produce a quoted string containing the value of a + * preprocessor macro. For example, if SIZE is defined to be 256, + * VAL2STR(SIZE) is "256". This is used to construct format + * strings for scanf-family functions below. + */ +#define QUOTE(x) #x +#define VAL2STR(x) QUOTE(x) + +/* * handles the extends clause of the 'function' keyword * Returns the number of errors encountered * This function is recursive. @@ -65,7 +74,9 @@ goto ret; } - scan = sscanf(value, "%s %s %s %s", funname, buf, filename, parentfun); + scan = sscanf(value, "%" VAL2STR(BUFSIZ) "s %" VAL2STR(BUFSIZ) "s " + "%" VAL2STR(MAXPATHLEN) "s %" VAL2STR(BUFSIZ) "s", funname, buf, + filename, parentfun); switch (scan) { case 0: /* funname not set */ case 1: /* buf not set, though ignored */ diff -ur bc-stage/usr/src/cmd/abi/spectrans/spec2map/xlator.c bc/usr/src/cmd/abi/spectrans/spec2map/xlator.c --- bc-stage/usr/src/cmd/abi/spectrans/spec2map/xlator.c Sat Jul 16 23:31:23 2005 +++ bc/usr/src/cmd/abi/spectrans/spec2map/xlator.c Sat Jul 16 23:19:30 2005 @@ -98,6 +98,15 @@ static int set_supported_arch(const char *); /* + * Macros to produce a quoted string containing the value of a + * preprocessor macro. For example, if SIZE is defined to be 256, + * VAL2STR(SIZE) is "256". This is used to construct format + * strings for scanf-family functions below. + */ +#define QUOTE(x) #x +#define VAL2STR(x) QUOTE(x) + +/* * xlator_init() * back-end initialization * returns pointer to Keywords on success @@ -230,7 +239,7 @@ return (XLATOR_NONFATAL); } - err = sscanf(value, "%s", rhs); + err = sscanf(value, "%" VAL2STR(BUFSIZ) "s", rhs); if (err == 0 || err == EOF) { errlog(INPUT|ERROR, "Error: Missing argument in \"%s\" line", kw); diff -ur bc-stage/usr/src/cmd/abi/spectrans/spec2trace/printfuncs.c bc/usr/src/cmd/abi/spectrans/spec2trace/printfuncs.c --- bc-stage/usr/src/cmd/abi/spectrans/spec2trace/printfuncs.c Sat Jul 16 13:37:59 2005 +++ bc/usr/src/cmd/abi/spectrans/spec2trace/printfuncs.c Sat Jul 16 23:24:40 2005 @@ -145,11 +145,11 @@ void generate_printfunc_calls(ENTRY *f) { - ENTRY *e; - char *name; - char *pf_str_name; - int li; - char *format; + ENTRY *e; + char *name; + char *pf_str_name; + int li; + const char *format; errlog(BEGIN, "generate_printfunc_calls() {"); for (e = symtab_get_first_arg(); e != NULL; e = symtab_get_next_arg()) { diff -ur bc-stage/usr/src/cmd/abi/spectrans/spec2trace/trace.c bc/usr/src/cmd/abi/spectrans/spec2trace/trace.c --- bc-stage/usr/src/cmd/abi/spectrans/spec2trace/trace.c Sat Jul 16 23:31:23 2005 +++ bc/usr/src/cmd/abi/spectrans/spec2trace/trace.c Sat Jul 16 23:34:51 2005 @@ -774,9 +774,9 @@ } decl_GetTraceInfo(pp, f_type, f_basetype, &funargs); - (void) sprintf(buf, "%s", strnormalize(f_type)); + (void) snprintf(buf, BUFSIZ, "%s", strnormalize(f_type)); (void) strcpy(f_type, buf); - (void) sprintf(buf, "%s", strnormalize(f_basetype)); + (void) snprintf(buf, BUFSIZ, "%s", strnormalize(f_basetype)); (void) strcpy(f_basetype, buf); levels = to_basetype(f_basetype);