Commit 776eebe8 authored by Alex Henrie's avatar Alex Henrie Committed by Alexandre Julliard

ole32: Fix memory leak in FileMonikerImpl_ComposeWith.

parent e68e03c7
...@@ -694,39 +694,39 @@ FileMonikerImpl_ComposeWith(IMoniker* iface, IMoniker* pmkRight, ...@@ -694,39 +694,39 @@ FileMonikerImpl_ComposeWith(IMoniker* iface, IMoniker* pmkRight,
lastIdx2=FileMonikerImpl_DecomposePath(str2,&strDec2)-1; lastIdx2=FileMonikerImpl_DecomposePath(str2,&strDec2)-1;
if ((lastIdx1==-1 && lastIdx2>-1)||(lastIdx1==1 && lstrcmpW(strDec1[0],twoPoint)==0)) if ((lastIdx1==-1 && lastIdx2>-1)||(lastIdx1==1 && lstrcmpW(strDec1[0],twoPoint)==0))
return MK_E_SYNTAX; res = MK_E_SYNTAX;
else{
if(lstrcmpW(strDec1[lastIdx1],bkSlash)==0) if(lstrcmpW(strDec1[lastIdx1],bkSlash)==0)
lastIdx1--; lastIdx1--;
/* for etch "..\" in the left of str2 remove the right element from str1 */ /* for each "..\" in the left of str2 remove the right element from str1 */
for(i=0; ( (lastIdx1>=0) && (strDec2[i]!=NULL) && (lstrcmpW(strDec2[i],twoPoint)==0) ) ;i+=2){ for(i=0; ( (lastIdx1>=0) && (strDec2[i]!=NULL) && (lstrcmpW(strDec2[i],twoPoint)==0) ); i+=2){
lastIdx1-=2; lastIdx1-=2;
} }
/* the length of the composed path string is raised by the sum of the two paths lengths */ /* the length of the composed path string is increased by the sum of the two paths' lengths */
newStr=HeapAlloc(GetProcessHeap(),0,sizeof(WCHAR)*(lstrlenW(str1)+lstrlenW(str2)+1)); newStr=HeapAlloc(GetProcessHeap(),0,sizeof(WCHAR)*(lstrlenW(str1)+lstrlenW(str2)+1));
if (newStr) if (newStr){
{ /* new path is the concatenation of the rest of str1 and str2 */
/* new path is the concatenation of the rest of str1 and str2 */ for(*newStr=0,j=0;j<=lastIdx1;j++)
for(*newStr=0,j=0;j<=lastIdx1;j++) strcatW(newStr,strDec1[j]);
strcatW(newStr,strDec1[j]);
if ((strDec2[i]==NULL && lastIdx1>-1 && lastIdx2>-1) || lstrcmpW(strDec2[i],bkSlash)!=0) if ((strDec2[i]==NULL && lastIdx1>-1 && lastIdx2>-1) || lstrcmpW(strDec2[i],bkSlash)!=0)
strcatW(newStr,bkSlash); strcatW(newStr,bkSlash);
for(j=i;j<=lastIdx2;j++) for(j=i;j<=lastIdx2;j++)
strcatW(newStr,strDec2[j]); strcatW(newStr,strDec2[j]);
/* create a new moniker with the new string */ /* create a new moniker with the new string */
res=CreateFileMoniker(newStr,ppmkComposite); res=CreateFileMoniker(newStr,ppmkComposite);
/* free all strings space memory used by this function */ /* free string memory used by this function */
HeapFree(GetProcessHeap(),0,newStr); HeapFree(GetProcessHeap(),0,newStr);
}
else res = E_OUTOFMEMORY;
} }
else res = E_OUTOFMEMORY;
free_stringtable(strDec1); free_stringtable(strDec1);
free_stringtable(strDec2); free_stringtable(strDec2);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment