Changeset 387950f7f7ae3768bc39f9487e9559179df325b6

Show
Ignore:
Timestamp:
14/07/08 14:56:32 (5 months ago)
Author:
Rémi Duraffort <ivoire@videolan.org>
git-committer:
Rémi Duraffort <ivoire@videolan.org> 1216040192 +0200
git-parent:

[ead25bd0bf1892d53584df85b8e7ac85c9bdd20f]

git-author:
Rémi Duraffort <ivoire@videolan.org> 1215852262 +0200
Message:

Fix a memory leak.
Test for the right thing before tring to do anything.
Check malloc return value (fix potential segfault).

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • src/input/control.c

    rc21f918 r387950f  
    612612 
    613613    vlc_mutex_lock( &p_input->p->input.p_item->lock ); 
    614     for( i = 0; i < p_input->p->i_bookmark; i++
     614    if( p_input->p->i_bookmark > 0
    615615    { 
    616         i_len += snprintf( NULL, 0, "{name=%s,bytes=%"PRId64",time=%"PRId64"}", 
    617                            p_input->p->bookmark[i]->psz_name, 
    618                            p_input->p->bookmark[i]->i_byte_offset, 
    619                            p_input->p->bookmark[i]->i_time_offset/1000000 ); 
    620     } 
    621     for( i = 0; i < p_input->p->i_bookmark; i++ ) 
    622     { 
    623         if( !i ) psz_value = psz_next = malloc( i_len + p_input->p->i_bookmark ); 
    624  
    625         sprintf( psz_next, "{name=%s,bytes=%"PRId64",time=%"PRId64"}", 
    626                  p_input->p->bookmark[i]->psz_name, 
    627                  p_input->p->bookmark[i]->i_byte_offset, 
    628                  p_input->p->bookmark[i]->i_time_offset/1000000 ); 
    629  
    630         psz_next += strlen( psz_next ); 
    631         if( i < p_input->p->i_bookmark - 1) 
    632         { 
    633             *psz_next = ','; psz_next++; 
     616        for( i = 0; i < p_input->p->i_bookmark; i++ ) 
     617        { 
     618            i_len += snprintf( NULL, 0, "{name=%s,bytes=%"PRId64",time=%"PRId64"}", 
     619                               p_input->p->bookmark[i]->psz_name, 
     620                               p_input->p->bookmark[i]->i_byte_offset, 
     621                               p_input->p->bookmark[i]->i_time_offset/1000000 ); 
     622        } 
     623        psz_value = psz_next = malloc( i_len + p_input->p->i_bookmark ); 
     624 
     625        for( i = 0; i < p_input->p->i_bookmark; i++ ) 
     626        { 
     627            sprintf( psz_next, "{name=%s,bytes=%"PRId64",time=%"PRId64"}", 
     628                     p_input->p->bookmark[i]->psz_name, 
     629                     p_input->p->bookmark[i]->i_byte_offset, 
     630                     p_input->p->bookmark[i]->i_time_offset/1000000 ); 
     631 
     632            psz_next += strlen( psz_next ); 
     633            if( i < p_input->p->i_bookmark - 1) 
     634                *psz_next = ','; psz_next++; 
    634635        } 
    635636    } 
     
    638639    input_Control( p_input, INPUT_ADD_OPTION, "bookmarks", 
    639640                   psz_value ? psz_value : "" ); 
     641    free( psz_value ); 
    640642} 
     643