summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsasha <sasha@97f52cf1-0a1b-0410-bd0e-c28be96e8082>2008-06-25 13:10:46 +0000
committersasha <sasha@97f52cf1-0a1b-0410-bd0e-c28be96e8082>2008-06-25 13:10:46 +0000
commit820ab6ba3fbd1e0322664156162bb51e9daeaf7d (patch)
tree93215fd4135d22c0b1d2bab67143359ab115079d
parent56a5e3453ca8651296755d5833aac6becf620fa3 (diff)
downloadzabbix-820ab6ba3fbd1e0322664156162bb51e9daeaf7d.tar.gz
zabbix-820ab6ba3fbd1e0322664156162bb51e9daeaf7d.tar.xz
zabbix-820ab6ba3fbd1e0322664156162bb51e9daeaf7d.zip
- [ZBX-386] fixed possible agent crash in processing of active checks
git-svn-id: svn://svn.zabbix.com/trunk@5790 97f52cf1-0a1b-0410-bd0e-c28be96e8082
-rw-r--r--ChangeLog1
-rw-r--r--src/libs/zbxcrypto/base64.c28
-rw-r--r--src/libs/zbxdbhigh/db.c2
3 files changed, 19 insertions, 12 deletions
diff --git a/ChangeLog b/ChangeLog
index 7613f9d3..c5f9b4ae 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -110,6 +110,7 @@ Changes for 1.5:
Changes for 1.4.6:
+ - [ZBX-386] fixed possible agent crash in processing of active checks (Sasha)
- [ZBX-379] added error checking for accept on server side (Sasha)
- [ZBX-365] added support of long process names for proc.num and proc.mem, Linux 2.6 (Sasha)
- [ZBX-78] fixed detection of net-snmp libs (Alexei)
diff --git a/src/libs/zbxcrypto/base64.c b/src/libs/zbxcrypto/base64.c
index 3aa94de0..dec27266 100644
--- a/src/libs/zbxcrypto/base64.c
+++ b/src/libs/zbxcrypto/base64.c
@@ -128,9 +128,10 @@ static unsigned char char_base64_decode(char c)
*----------------------------------------------------------------------*/
void str_base64_encode(const char *p_str, char *p_b64str, int in_size)
{
- int i;
- unsigned char from1=0,from2=0,from3=0;
- unsigned char to1=0,to2=0,to3=0,to4=0;
+ int i;
+ unsigned char from1=0,from2=0,from3=0;
+ unsigned char to1=0,to2=0,to3=0,to4=0;
+ char *p;
if ( 0 == in_size )
{
@@ -140,8 +141,13 @@ void str_base64_encode(const char *p_str, char *p_b64str, int in_size)
assert(p_str);
assert(p_b64str);
+ p = p_b64str;
+
for ( i = 0; i < in_size ; i += 3 )
{
+ if (p - p_b64str > ZBX_MAX_B64_LEN - 5)
+ break;
+
from1 = from2 = from3 = 0;
from1 = p_str[i];
if (i+1 < in_size)
@@ -159,24 +165,24 @@ void str_base64_encode(const char *p_str, char *p_b64str, int in_size)
to3 = ((from2&0xf)<<2)|(from3>>6);
to4 = from3&0x3f;
- *(p_b64str++) = char_base64_encode(to1);
- *(p_b64str++) = char_base64_encode(to2);
+ *p++ = char_base64_encode(to1);
+ *p++ = char_base64_encode(to2);
if (i+1 < in_size)
{
- *(p_b64str++) = char_base64_encode(to3);
+ *p++ = char_base64_encode(to3);
}
else
{
- *(p_b64str++) = '='; /* Padding */
+ *p++ = '='; /* Padding */
}
if (i+2 < in_size)
{
- *(p_b64str++) = char_base64_encode(to4);
+ *p++ = char_base64_encode(to4);
}
else
{
- *(p_b64str++) = '='; /* Padding */
+ *p++ = '='; /* Padding */
};
/* if ( i % (76/4*3) == 0)
@@ -185,8 +191,8 @@ void str_base64_encode(const char *p_str, char *p_b64str, int in_size)
*(p_b64str++) = '\n';
}*/
};
-
- *p_b64str = '\0';
+
+ *p = '\0';
return;
}
/*------------------------------------------------------------------------
diff --git a/src/libs/zbxdbhigh/db.c b/src/libs/zbxdbhigh/db.c
index 59a99216..a300fad4 100644
--- a/src/libs/zbxdbhigh/db.c
+++ b/src/libs/zbxdbhigh/db.c
@@ -1154,7 +1154,7 @@ int DBadd_history_text(zbx_uint64_t itemid, char *value, int clock)
zbx_uint64_t id;
sqlo_lob_desc_t loblp; /* the lob locator */
- sqlo_stmt_handle_t sth;
+ sqlo_stmt_handle_t sth = 0;
sqlo_autocommit_off(oracle);