@@ -440,12 +440,20 @@ static PHP_GINIT_FUNCTION(snmp)
440
440
}
441
441
/* }}} */
442
442
443
+ #define PHP_SNMP_SESSION_FREE (a ) { \
444
+ if ((*session)->a) { \
445
+ efree((*session)->a); \
446
+ (*session)->a = NULL; \
447
+ } \
448
+ }
449
+
443
450
static void netsnmp_session_free (php_snmp_session * * session )
444
451
{
445
452
if (* session ) {
446
- if ((* session )-> peername ) {
447
- efree ((* session )-> peername );
448
- }
453
+ PHP_SNMP_SESSION_FREE (peername );
454
+ PHP_SNMP_SESSION_FREE (community );
455
+ PHP_SNMP_SESSION_FREE (securityName );
456
+ PHP_SNMP_SESSION_FREE (contextEngineID );
449
457
efree (* session );
450
458
* session = NULL ;
451
459
}
@@ -1115,11 +1123,11 @@ static int netsnmp_session_init(php_snmp_session **session_p, int version, char
1115
1123
1116
1124
if (version == SNMP_VERSION_3 ) {
1117
1125
/* Setting the security name. */
1118
- session -> securityName = strdup (community );
1126
+ session -> securityName = estrdup (community );
1119
1127
session -> securityNameLen = strlen (session -> securityName );
1120
1128
} else {
1121
1129
session -> authenticator = NULL ;
1122
- session -> community = (u_char * )community ;
1130
+ session -> community = (u_char * )estrdup ( community ) ;
1123
1131
session -> community_len = strlen (community );
1124
1132
}
1125
1133
@@ -1222,20 +1230,20 @@ static int netsnmp_session_gen_sec_key(struct snmp_session *s, char *pass TSRMLS
1222
1230
static int netsnmp_session_set_contextEngineID (struct snmp_session * s , char * contextEngineID TSRMLS_DC )
1223
1231
{
1224
1232
size_t ebuf_len = 32 , eout_len = 0 ;
1225
- u_char * ebuf = (u_char * ) malloc (ebuf_len ); /* memory freed by SNMP library, malloc NOT emalloc */
1233
+ u_char * ebuf = (u_char * ) emalloc (ebuf_len );
1226
1234
1227
1235
if (ebuf == NULL ) {
1228
1236
php_error_docref (NULL TSRMLS_CC , E_WARNING , "malloc failure setting contextEngineID" );
1229
1237
return (-1 );
1230
1238
}
1231
1239
if (!snmp_hex_to_binary (& ebuf , & ebuf_len , & eout_len , 1 , contextEngineID )) {
1232
1240
php_error_docref (NULL TSRMLS_CC , E_WARNING , "Bad engine ID value '%s'" , contextEngineID );
1233
- free (ebuf );
1241
+ efree (ebuf );
1234
1242
return (-1 );
1235
1243
}
1236
1244
1237
1245
if (s -> contextEngineID ) {
1238
- free (s -> contextEngineID );
1246
+ efree (s -> contextEngineID );
1239
1247
}
1240
1248
1241
1249
s -> contextEngineID = ebuf ;
0 commit comments