Просмотр исходного кода

* Do not free invalid pointer in RegSetValueExA wrapper.

git-svn-id: trunk@10303 -
yury 17 лет назад
Родитель
Сommit
29c19fa4e3
1 измененных файлов с 8 добавлено и 5 удалено
  1. 8 5
      rtl/wince/wininc/cemiss.inc

+ 8 - 5
rtl/wince/wininc/cemiss.inc

@@ -199,23 +199,26 @@ end;
 
 
 function RegSetValueExA(hKey:HKEY; lpValueName:LPCSTR; Reserved:DWORD; dwType:DWORD; lpData:pointer;cbData:DWORD):LONG;
 function RegSetValueExA(hKey:HKEY; lpValueName:LPCSTR; Reserved:DWORD; dwType:DWORD; lpData:pointer;cbData:DWORD):LONG;
 var
 var
-  lpwsValueName: PWideChar;
+  lpwsValueName, ws: PWideChar;
   DataBuf: pointer;
   DataBuf: pointer;
   sz: DWORD;
   sz: DWORD;
 begin
 begin
  lpwsValueName:=PCharToPWideChar(lpValueName);
  lpwsValueName:=PCharToPWideChar(lpValueName);
  if dwType in [REG_SZ, REG_EXPAND_SZ, REG_MULTI_SZ] then begin
  if dwType in [REG_SZ, REG_EXPAND_SZ, REG_MULTI_SZ] then begin
-   DataBuf:=PCharToPWideChar(lpData, cbData, @sz);
+   ws:=PCharToPWideChar(lpData, cbData, @sz);
    if (cbData > 0) and (PChar(lpData)[cbData - 1] <> #0) then
    if (cbData > 0) and (PChar(lpData)[cbData - 1] <> #0) then
      Inc(sz, SizeOf(WideChar));
      Inc(sz, SizeOf(WideChar));
    cbData:=sz;
    cbData:=sz;
+   DataBuf:=ws;
  end
  end
- else
+ else begin
    DataBuf:=lpData;
    DataBuf:=lpData;
+   ws:=nil;
+ end;
  Result:=RegSetValueExW(hKey, lpwsValueName, Reserved, dwType, DataBuf, cbData);
  Result:=RegSetValueExW(hKey, lpwsValueName, Reserved, dwType, DataBuf, cbData);
  FreeMem(lpwsValueName);
  FreeMem(lpwsValueName);
- if DataBuf <> nil then
-   FreeMem(DataBuf);
+ if ws <> nil then
+   FreeMem(ws);
 end;
 end;
 
 
 {$endif read_implementation}
 {$endif read_implementation}