From 2288c6bb3f8ad1972315d98d8271ae9fbf391cde Mon Sep 17 00:00:00 2001 From: eteo Date: Sun, 23 Apr 2006 11:05:00 +0000 Subject: 2006-04-23 Eugene Teo PR 2149 * translate.cxx (mapvar::set): Test _stp_map_set_xx() for array overflows. --- translate.cxx | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'translate.cxx') 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 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 -- cgit