From ee849ab82b5eb6f75e66318f13562495c7f8cb15 Mon Sep 17 00:00:00 2001 From: Jordan Lee Date: Tue, 1 Feb 2011 17:56:19 +0000 Subject: [PATCH] (trunk libT) #3956 "tr_bencFree() could be faster" -- fix memory error. #3956's r11780 has uncovered a longstanding memory error that occurs when tr_bencParse() fails to parse a dict and leaves a dangling key. This is fixed by cleaning up the key. --- libtransmission/bencode.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/libtransmission/bencode.c b/libtransmission/bencode.c index d3a648436..be87bb031 100644 --- a/libtransmission/bencode.c +++ b/libtransmission/bencode.c @@ -944,14 +944,13 @@ struct SaveNode static void nodeInitDict( struct SaveNode * node, const tr_benc * val, tr_bool sort_dicts ) { - int nKeys; const int n = val->val.l.count; + const int nKeys = n / 2; assert( tr_bencIsDict( val ) ); - nKeys = n / 2; node->val = val; - node->children = tr_new0( int, nKeys * 2 ); + node->children = tr_new0( int, n ); if( sort_dicts ) { @@ -974,7 +973,7 @@ nodeInitDict( struct SaveNode * node, const tr_benc * val, tr_bool sort_dicts ) } else { - int i ; + int i; for( i=0; ichildren[node->childCount++] = i; -- 2.50.1