summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--translate.cxx10
2 files changed, 14 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 3e75c78c..3bea623f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
2006-04-23 Eugene Teo <eteo@redhat.com>
+ PR 2149
+ * translate.cxx (mapvar::set): Test _stp_map_set_xx() for
+ array overflows.
+
+2006-04-23 Eugene Teo <eteo@redhat.com>
+
* small_demos/ansi_colors.stp: Add an example of using octal
escape sequences to display all possible ansi colors.
diff --git a/translate.cxx b/translate.cxx
index 83d6dd93..f3a5b23d 100644
--- a/translate.cxx
+++ b/translate.cxx
@@ -581,14 +581,20 @@ struct mapvar
string set (vector<tmpvar> const & indices, tmpvar const & val) const
{
+ string res = "{ int rc = ";
+
// impedance matching: empty strings -> NULL
if (type() == pe_string)
- return (call_prefix("set", indices)
+ res += (call_prefix("set", indices)
+ ", (" + val.qname() + "[0] ? " + val.qname() + " : NULL))");
else if (type() == pe_long)
- return (call_prefix("set", indices) + ", " + val.qname() + ")");
+ res += (call_prefix("set", indices) + ", " + val.qname() + ")");
else
throw semantic_error("setting a value of an unsupported map type");
+
+ res += "; if (unlikely(rc)) c->last_error = \"Array overflow, check MAXMAPENTRIES\"; }";
+
+ return res;
}
string hist() const