$OpenBSD: patch-gpasm_evaluate_c,v 1.1.1.1 2003/11/03 01:02:34 naddy Exp $ --- gpasm/evaluate.c.orig 2003-10-14 20:58:03.000000000 +1000 +++ gpasm/evaluate.c 2003-10-14 21:01:47.000000000 +1000 @@ -79,7 +79,7 @@ int can_evaluate_concatenation(struct pn return can_evaluate_concatenation(p->value.binop.p0) && can_evaluate_concatenation(p->value.binop.p1); case string: - sprintf(buf, "Illegal argument (%s).", p->value.string); + snprintf(buf, sizeof(buf), "Illegal argument (%s).", p->value.string); gperror(GPE_ILLEGAL_ARGU, buf); return 0; default: @@ -113,13 +113,13 @@ int can_evaluate(struct pnode *p) s = get_symbol(state.stTop, p->value.symbol); if (s == NULL) { - sprintf(buf, "Symbol not previously defined (%s).", p->value.symbol); + snprintf(buf, sizeof(buf), "Symbol not previously defined (%s).", p->value.symbol); gperror(GPE_NOSYM, buf); } else { var = get_symbol_annotation(s); if (var == NULL) { - sprintf(buf, "Symbol not assigned a value (%s).", p->value.symbol); + snprintf(buf, sizeof(buf), "Symbol not assigned a value (%s).", p->value.symbol); gpwarning(GPW_UNKNOWN, buf); } } @@ -132,7 +132,7 @@ int can_evaluate(struct pnode *p) case binop: return can_evaluate(p->value.binop.p0) && can_evaluate(p->value.binop.p1); case string: - sprintf(buf, "Illegal argument (%s).", p->value.string); + snprintf(buf, sizeof(buf), "Illegal argument (%s).", p->value.string); gperror(GPE_ILLEGAL_ARGU, buf); return 0; default: @@ -151,19 +151,23 @@ char *evaluate_concatenation(struct pnod assert(p->value.binop.op == CONCAT); { char *s[2], *new; + size_t sizeof_new; s[0] = evaluate_concatenation(p->value.binop.p0); s[1] = evaluate_concatenation(p->value.binop.p1); - new = malloc(strlen(s[0]) + 1 + strlen(s[1]) + 1); - strcpy(new, s[0]); - strcat(new, s[1]); + sizeof_new =strlen(s[0]) + 1 + strlen(s[1]) + 1; + new = malloc(sizeof_new); + if (new) { + strlcpy(new, s[0], sizeof_new); + strlcat(new, s[1], sizeof_new); + } return new; } case unop: assert(p->value.unop.op == VAR); { char buf[80]; - sprintf(buf, "%d", maybe_evaluate(p->value.unop.p0)); + snprintf(buf, sizeof(buf), "%d", maybe_evaluate(p->value.unop.p0)); return (strdup(buf)); } default: @@ -186,7 +190,7 @@ gpasmVal evaluate(struct pnode *p) s = get_symbol(state.stTop, string); if (s == NULL) { char buf[BUFSIZ]; - sprintf(buf, "Symbol not previously defined (%s).", string); + snprintf(buf, sizeof(buf), "Symbol not previously defined (%s).", string); gperror(GPE_NOSYM, buf); return 0; } else { @@ -389,7 +393,7 @@ add_reloc(struct pnode *p, short offset, if (strcmp(p->value.symbol, "$") == 0) { char buffer[BUFSIZ]; - sprintf(buffer, "_$_%06x", state.org << _16bit_core); + snprintf(buffer, sizeof(buffer), "_$_%06x", state.org << _16bit_core); set_global(buffer, state.org << _16bit_core, PERMANENT, gvt_static); s = get_symbol(state.stTop, buffer); } else {