Changeset 21d5beede3b4df8a588b131a3ec598f2b84bc6de

Show
Ignore:
Timestamp:
06/14/08 10:09:06 (3 months ago)
Author:
Jean-Paul Saman <jpsaman@videolan.org>
git-committer:
Jean-Paul Saman <jpsaman@videolan.org> 1213430946 +0200
git-parent:

[feca357aaa88380d9e9c5c1bd21b2b25d4723acf]

git-author:
Jean-Paul Saman <jpsaman@videolan.org> 1213108465 +0200
Message:

Add comment about getVariable() and setVariable() JS function: they are removed because of their security implications. Everyone is advice to use the newer ActiveX v2 (IVLCControl2) interface instead.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • projects/activex/vlccontrol.cpp

    rfeca357 r21d5bee  
    510510STDMETHODIMP VLCControl::setVariable(BSTR name, VARIANT value) 
    511511{ 
     512    /** setVariable() is an unsafe interface because of security 
     513      implications it has and is thus removed. */ 
    512514    return E_INVALIDARG; 
    513 #if 0 
    514     if( 0 == SysStringLen(name) ) 
    515         return E_INVALIDARG; 
    516  
    517     libvlc_instance_t *p_libvlc; 
    518     HRESULT hr = _p_instance->getVLC(&p_libvlc); 
    519     if( SUCCEEDED(hr) ) 
    520     { 
    521         int codePage = _p_instance->getCodePage(); 
    522         char *psz_varname = CStrFromBSTR(codePage, name); 
    523         if( NULL == psz_varname ) 
    524             return E_OUTOFMEMORY; 
    525  
    526         int i_type; 
    527         vlc_value_t val; 
    528  
    529         if( VLC_SUCCESS == VLC_VariableType(i_vlc, psz_varname, &i_type) ) 
    530         { 
    531             VARIANT arg; 
    532             VariantInit(&arg); 
    533  
    534             switch( i_type ) 
    535             { 
    536                 case VLC_VAR_BOOL: 
    537                     hr = VariantChangeType(&arg, &value, 0, VT_BOOL); 
    538                     if( SUCCEEDED(hr) ) 
    539                         val.b_bool = (VARIANT_TRUE == V_BOOL(&arg)) ? true : false; 
    540                     break; 
    541  
    542                 case VLC_VAR_INTEGER: 
    543                 case VLC_VAR_HOTKEY: 
    544                     hr = VariantChangeType(&arg, &value, 0, VT_I4); 
    545                     if( SUCCEEDED(hr) ) 
    546                         val.i_int = V_I4(&arg); 
    547                     break; 
    548  
    549                 case VLC_VAR_FLOAT: 
    550                     hr = VariantChangeType(&arg, &value, 0, VT_R4); 
    551                     if( SUCCEEDED(hr) ) 
    552                         val.f_float = V_R4(&arg); 
    553                     break; 
    554  
    555                 case VLC_VAR_STRING: 
    556                 case VLC_VAR_MODULE: 
    557                 case VLC_VAR_FILE: 
    558                 case VLC_VAR_DIRECTORY: 
    559                 case VLC_VAR_VARIABLE: 
    560                     hr = VariantChangeType(&arg, &value, 0, VT_BSTR); 
    561                     if( SUCCEEDED(hr) ) 
    562                     { 
    563                         i_type = VLC_VAR_STRING; 
    564                         val.psz_string = CStrFromBSTR(codePage, V_BSTR(&arg)); 
    565                         VariantClear(&arg); 
    566                     } 
    567                     break; 
    568  
    569                 case VLC_VAR_TIME: 
    570                     // use a double value to represent time (base is expressed in seconds) 
    571                     hr = VariantChangeType(&arg, &value, 0, VT_R8); 
    572                     if( SUCCEEDED(hr) ) 
    573                         val.i_time = (signed __int64)(V_R8(&arg)*1000000.0); 
    574                     break; 
    575  
    576                 default: 
    577                     hr = DISP_E_TYPEMISMATCH; 
    578             } 
    579         } 
    580         else { 
    581             // no defined type, use type in VARIANT 
    582             hr = NO_ERROR; 
    583             switch( V_VT(&value) ) 
    584             { 
    585                 case VT_BOOL: 
    586                     val.b_bool = (VARIANT_TRUE == V_BOOL(&value)) ? true : false; 
    587                     i_type = VLC_VAR_BOOL; 
    588                     break; 
    589                 case VT_I4: 
    590                     val.i_int = V_I4(&value); 
    591                     i_type = VLC_VAR_INTEGER; 
    592                     break; 
    593                 case VT_R4: 
    594                     val.f_float = V_R4(&value); 
    595                     i_type = VLC_VAR_FLOAT; 
    596                     break; 
    597                 case VT_BSTR: 
    598                     val.psz_string = CStrFromBSTR(codePage, V_BSTR(&value)); 
    599                     i_type = VLC_VAR_STRING; 
    600                     break; 
    601                 case VT_R8: 
    602                     // use a double value to represent time (base is expressed in seconds) 
    603                     val.i_time = (signed __int64)(V_R8(&value)*1000000.0); 
    604                     i_type = VLC_VAR_TIME; 
    605                     break; 
    606                 default: 
    607                     hr = DISP_E_TYPEMISMATCH; 
    608             } 
    609         } 
    610         if( SUCCEEDED(hr) ) 
    611         { 
    612             hr = (VLC_SUCCESS == VLC_VariableSet(i_vlc, psz_varname, val)) ? NOERROR : E_FAIL; 
    613  
    614             if( (VLC_VAR_STRING == i_type) && (NULL != val.psz_string) ) 
    615                 CoTaskMemFree(val.psz_string); 
    616         } 
    617         CoTaskMemFree(psz_varname); 
    618     } 
    619     return hr; 
    620 #endif 
    621 }; 
    622  
    623 STDMETHODIMP VLCControl::getVariable( BSTR name, VARIANT *value) 
    624 
     515}; 
     516 
     517STDMETHODIMP VLCControl::getVariable(BSTR name, VARIANT *value) 
     518
     519    /** getVariable() is an unsafe interface because of security 
     520      implications it has and is thus removed. */ 
    625521    return E_INVALIDARG; 
    626 #if 0 
    627     if( NULL == value ) 
    628         return E_POINTER; 
    629  
    630     VariantInit(value); 
    631  
    632     if( 0 == SysStringLen(name) ) 
    633         return E_INVALIDARG; 
    634  
    635     libvlc_instance_t *p_libvlc; 
    636     HRESULT hr = _p_instance->getVLC(&p_libvlc); 
    637     if( SUCCEEDED(hr) ) 
    638     { 
    639         UINT codePage = _p_instance->getCodePage(); 
    640         char *psz_varname = CStrFromBSTR(codePage, name); 
    641         if( NULL == psz_varname ) 
    642             return E_OUTOFMEMORY; 
    643  
    644         hr = E_INVALIDARG; 
    645  
    646         vlc_value_t val; 
    647         int i_type; 
    648  
    649         if( (VLC_SUCCESS == VLC_VariableGet(i_vlc, psz_varname, &val)) 
    650          && (VLC_SUCCESS == VLC_VariableType(i_vlc, psz_varname, &i_type)) ) 
    651         { 
    652             hr = NOERROR; 
    653             switch( i_type ) 
    654             { 
    655                 case VLC_VAR_BOOL: 
    656                     V_VT(value) = VT_BOOL; 
    657                     V_BOOL(value) = val.b_bool ? VARIANT_TRUE : VARIANT_FALSE; 
    658                     break; 
    659  
    660                 case VLC_VAR_INTEGER: 
    661                 case VLC_VAR_HOTKEY: 
    662                     V_VT(value) = VT_I4; 
    663                     V_I4(value) = val.i_int; 
    664                     break; 
    665  
    666                 case VLC_VAR_FLOAT: 
    667                     V_VT(value) = VT_R4; 
    668                     V_R4(value) = val.f_float; 
    669                     break; 
    670  
    671                 case VLC_VAR_STRING: 
    672                 case VLC_VAR_MODULE: 
    673                 case VLC_VAR_FILE: 
    674                 case VLC_VAR_DIRECTORY: 
    675                 case VLC_VAR_VARIABLE: 
    676                     V_VT(value) = VT_BSTR; 
    677                     V_BSTR(value) = BSTRFromCStr(codePage, val.psz_string); 
    678                     if( NULL != val.psz_string) 
    679                         free(val.psz_string); 
    680                     break; 
    681  
    682                 case VLC_VAR_TIME: 
    683                     // use a double value to represent time (base is expressed in seconds) 
    684                     V_VT(value) = VT_R8; 
    685                     V_R8(value) = ((double)val.i_time)/1000000.0; 
    686                     break; 
    687  
    688                 default: 
    689                     hr = DISP_E_TYPEMISMATCH; 
    690             } 
    691         } 
    692         CoTaskMemFree(psz_varname); 
    693         return hr; 
    694     } 
    695     return hr; 
    696 #endif 
    697522}; 
    698523