diff --git a/frontends/blif/blifparse.cc b/frontends/blif/blifparse.cc
index b81808b1e..26cd14033 100644
--- a/frontends/blif/blifparse.cc
+++ b/frontends/blif/blifparse.cc
@@ -85,7 +85,7 @@ void parse_blif(RTLIL::Design *design, std::istream &f, std::string dff_name, bo
 	RTLIL::Cell *sopcell = NULL;
 	RTLIL::Cell *lastcell = nullptr;
 	RTLIL::State lut_default_state = RTLIL::State::Sx;
-	char err_reason[80];
+	std::string err_reason;
 	int blif_maxnum = 0, sopmode = -1;
 
 	auto blif_wire = [&](const std::string &wire_name) -> Wire*
@@ -276,7 +276,7 @@ void parse_blif(RTLIL::Design *design, std::istream &f, std::string dff_name, bo
 
 				if(lastcell == nullptr || module == nullptr)
 				{
-					snprintf(err_reason, sizeof(err_reason), "No primative object to attach .cname %s.", p);
+					err_reason = stringf("No primative object to attach .cname %s.", p);
 					goto error_with_reason;
 				}
 
@@ -302,13 +302,13 @@ void parse_blif(RTLIL::Design *design, std::istream &f, std::string dff_name, bo
 				}
 				if (!strcmp(cmd, ".attr")) {
 					if (obj_attributes == nullptr) {
-						snprintf(err_reason, sizeof(err_reason), "No object to attach .attr too.");
+						err_reason = stringf("No object to attach .attr too.");
 						goto error_with_reason;
 					}
 					(*obj_attributes)[id_n] = const_v;
 				} else {
 					if (obj_parameters == nullptr) {
-						snprintf(err_reason, sizeof(err_reason), "No object to attach .param too.");
+						err_reason = stringf("No object to attach .param too.");
 						goto error_with_reason;
 					}
 					(*obj_parameters)[id_n] = const_v;
@@ -575,7 +575,7 @@ void parse_blif(RTLIL::Design *design, std::istream &f, std::string dff_name, bo
 error:
 	log_error("Syntax error in line %d!\n", line_count);
 error_with_reason:
-	log_error("Syntax error in line %d: %s\n", line_count, err_reason);
+	log_error("Syntax error in line %d: %s\n", line_count, err_reason.c_str());
 }
 
 struct BlifFrontend : public Frontend {