Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
799ef700
Commit
799ef700
authored
Aug 10, 2007
by
Jason Edmeades
Committed by
Alexandre Julliard
Aug 13, 2007
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
advpack: Strip single quotes (with tests) on reg keys.
parent
7fce92ea
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
74 additions
and
2 deletions
+74
-2
advpack.c
dlls/advpack/advpack.c
+16
-1
advpack.c
dlls/advpack/tests/advpack.c
+58
-1
No files found.
dlls/advpack/advpack.c
View file @
799ef700
...
...
@@ -49,6 +49,17 @@ static const WCHAR setup_key[] = {
'C'
,
'o'
,
'm'
,
'p'
,
'o'
,
'n'
,
'e'
,
'n'
,
't'
,
's'
,
0
};
/* Strip single quotes from a token - note size includes NULL */
static
void
strip_quotes
(
WCHAR
*
buffer
,
DWORD
*
size
)
{
if
(
buffer
[
0
]
==
'\''
&&
(
*
size
>
1
)
&&
buffer
[
*
size
-
2
]
==
'\''
)
{
*
size
-=
2
;
buffer
[
*
size
]
=
0x00
;
memmove
(
buffer
,
buffer
+
1
,
*
size
*
sizeof
(
WCHAR
));
}
}
/* parses the destination directory parameters from pszSection
* the parameters are of the form: root,key,value,unknown,fallback
* we first read the reg value root\\key\\value and if that fails,
...
...
@@ -68,8 +79,11 @@ static void get_dest_dir(HINF hInf, PCWSTR pszSection, PWSTR pszBuffer, DWORD dw
/* load the destination parameters */
SetupFindFirstLineW
(
hInf
,
pszSection
,
NULL
,
&
context
);
SetupGetStringFieldW
(
&
context
,
1
,
prefix
,
PREFIX_LEN
,
&
size
);
strip_quotes
(
prefix
,
&
size
);
SetupGetStringFieldW
(
&
context
,
2
,
key
,
MAX_PATH
,
&
size
);
strip_quotes
(
key
,
&
size
);
SetupGetStringFieldW
(
&
context
,
3
,
value
,
MAX_PATH
,
&
size
);
strip_quotes
(
value
,
&
size
);
if
(
!
lstrcmpW
(
prefix
,
hklm
))
root
=
HKEY_LOCAL_MACHINE
;
...
...
@@ -84,7 +98,8 @@ static void get_dest_dir(HINF hInf, PCWSTR pszSection, PWSTR pszBuffer, DWORD dw
if
(
RegOpenKeyW
(
root
,
key
,
&
subkey
)
||
RegQueryValueExW
(
subkey
,
value
,
NULL
,
NULL
,
(
LPBYTE
)
pszBuffer
,
&
size
))
{
SetupGetStringFieldW
(
&
context
,
5
,
pszBuffer
,
dwSize
,
NULL
);
SetupGetStringFieldW
(
&
context
,
5
,
pszBuffer
,
dwSize
,
&
size
);
strip_quotes
(
pszBuffer
,
&
size
);
}
RegCloseKey
(
subkey
);
...
...
dlls/advpack/tests/advpack.c
View file @
799ef700
...
...
@@ -43,6 +43,7 @@ static HRESULT (WINAPI *pTranslateInfString)(LPCSTR,LPCSTR,LPCSTR,LPCSTR,LPSTR,D
static
HRESULT
(
WINAPI
*
pTranslateInfStringEx
)(
HINF
,
PCSTR
,
PCSTR
,
PCSTR
,
PSTR
,
DWORD
,
PDWORD
,
PVOID
);
static
CHAR
inf_file
[
MAX_PATH
];
static
CHAR
PROG_FILES_ROOT
[
MAX_PATH
];
static
CHAR
PROG_FILES
[
MAX_PATH
];
static
DWORD
PROG_FILES_LEN
;
...
...
@@ -52,9 +53,10 @@ static void get_progfiles_dir(void)
DWORD
size
=
MAX_PATH
;
RegOpenKeyA
(
HKEY_LOCAL_MACHINE
,
"Software
\\
Microsoft
\\
Windows
\\
CurrentVersion"
,
&
hkey
);
RegQueryValueExA
(
hkey
,
"ProgramFilesDir"
,
NULL
,
NULL
,
(
LPBYTE
)
PROG_FILES
,
&
size
);
RegQueryValueExA
(
hkey
,
"ProgramFilesDir"
,
NULL
,
NULL
,
(
LPBYTE
)
PROG_FILES
_ROOT
,
&
size
);
RegCloseKey
(
hkey
);
lstrcpyA
(
PROG_FILES
,
PROG_FILES_ROOT
);
lstrcatA
(
PROG_FILES
,
TEST_STRING1
);
PROG_FILES_LEN
=
lstrlenA
(
PROG_FILES
)
+
1
;
}
...
...
@@ -198,6 +200,9 @@ static void create_inf_file(void)
append_str
(
&
ptr
,
"Signature=
\"
$Chicago$
\"\n
"
);
append_str
(
&
ptr
,
"[CustInstDestSection]
\n
"
);
append_str
(
&
ptr
,
"49001=ProgramFilesDir
\n
"
);
append_str
(
&
ptr
,
"49010=DestA,1
\n
"
);
append_str
(
&
ptr
,
"49020=DestB
\n
"
);
append_str
(
&
ptr
,
"49030=DestC
\n
"
);
append_str
(
&
ptr
,
"[ProgramFilesDir]
\n
"
);
append_str
(
&
ptr
,
"HKLM,
\"
Software
\\
Microsoft
\\
Windows
\\
CurrentVersion
\"
,"
);
append_str
(
&
ptr
,
"
\"
ProgramFilesDir
\"
,,
\"
%%24%%
\\
%%LProgramF%%
\"\n
"
);
...
...
@@ -207,10 +212,20 @@ static void create_inf_file(void)
append_str
(
&
ptr
,
"[Options.NTx86]
\n
"
);
append_str
(
&
ptr
,
"49001=ProgramFilesDir
\n
"
);
append_str
(
&
ptr
,
"InstallDir=%%49001%%
\\
%%DefaultAppPath%%
\n
"
);
append_str
(
&
ptr
,
"Result1=%%49010%%
\n
"
);
append_str
(
&
ptr
,
"Result2=%%49020%%
\n
"
);
append_str
(
&
ptr
,
"Result3=%%49030%%
\n
"
);
append_str
(
&
ptr
,
"CustomHDestination=CustInstDestSection
\n
"
);
append_str
(
&
ptr
,
"[Strings]
\n
"
);
append_str
(
&
ptr
,
"DefaultAppPath=
\"
Application Name
\"\n
"
);
append_str
(
&
ptr
,
"LProgramF=
\"
Program Files
\"\n
"
);
append_str
(
&
ptr
,
"[DestA]
\n
"
);
append_str
(
&
ptr
,
"HKLM,
\"
Software
\\
Garbage
\"
,
\"
ProgramFilesDir
\"
,,'%%24%%
\\
%%LProgramF%%'
\n
"
);
append_str
(
&
ptr
,
"[DestB]
\n
"
);
append_str
(
&
ptr
,
"'HKLM','Software
\\
Microsoft
\\
Windows
\\
CurrentVersion',"
);
append_str
(
&
ptr
,
"'ProgramFilesDir',,
\"
%%24%%
\"\n
"
);
append_str
(
&
ptr
,
"[DestC]
\n
"
);
append_str
(
&
ptr
,
"HKLM,
\"
Software
\\
Garbage
\"
,
\"
ProgramFilesDir
\"
,,'%%24%%'
\n
"
);
WriteFile
(
hf
,
data
,
ptr
-
data
,
&
dwNumberOfBytesWritten
,
NULL
);
CloseHandle
(
hf
);
...
...
@@ -397,6 +412,48 @@ static void translateinfstringex_test(void)
ok
(
!
strcmp
(
buffer
,
PROG_FILES
),
"Expected %s, got %s
\n
"
,
PROG_FILES
,
buffer
);
ok
(
size
==
PROG_FILES_LEN
,
"Expected size %d, got %d
\n
"
,
PROG_FILES_LEN
,
size
);
/* Single quote test (Note size includes null on return from call) */
memset
(
buffer
,
'a'
,
PROG_FILES_LEN
);
buffer
[
PROG_FILES_LEN
-
1
]
=
'\0'
;
size
=
MAX_PATH
;
hr
=
pTranslateInfStringEx
(
hinf
,
inf_file
,
"Options.NTx86"
,
"Result1"
,
buffer
,
size
,
&
size
,
NULL
);
ok
(
hr
==
S_OK
,
"Expected S_OK, got %08x
\n
"
,
hr
);
todo_wine
{
/* Wine returns C:\\Program Files, not C:\Program Files */
ok
(
!
lstrcmpi
(
buffer
,
PROG_FILES_ROOT
),
"Expected %s, got %s
\n
"
,
PROG_FILES_ROOT
,
buffer
);
ok
(
size
==
lstrlenA
(
PROG_FILES_ROOT
)
+
1
,
"Expected size %d, got %d
\n
"
,
lstrlenA
(
PROG_FILES_ROOT
)
+
1
,
size
);
}
memset
(
buffer
,
'a'
,
PROG_FILES_LEN
);
buffer
[
PROG_FILES_LEN
-
1
]
=
'\0'
;
size
=
MAX_PATH
;
hr
=
pTranslateInfStringEx
(
hinf
,
inf_file
,
"Options.NTx86"
,
"Result2"
,
buffer
,
size
,
&
size
,
NULL
);
ok
(
hr
==
S_OK
,
"Expected S_OK, got %08x
\n
"
,
hr
);
ok
(
!
lstrcmpi
(
buffer
,
PROG_FILES_ROOT
),
"Expected %s, got %s
\n
"
,
PROG_FILES_ROOT
,
buffer
);
ok
(
size
==
lstrlenA
(
PROG_FILES_ROOT
)
+
1
,
"Expected size %d, got %d
\n
"
,
lstrlenA
(
PROG_FILES_ROOT
)
+
1
,
size
);
{
char
drive
[
MAX_PATH
];
lstrcpy
(
drive
,
PROG_FILES_ROOT
);
drive
[
3
]
=
0x00
;
/* Just keep the system drive plus '\' */
memset
(
buffer
,
'a'
,
PROG_FILES_LEN
);
buffer
[
PROG_FILES_LEN
-
1
]
=
'\0'
;
size
=
MAX_PATH
;
hr
=
pTranslateInfStringEx
(
hinf
,
inf_file
,
"Options.NTx86"
,
"Result3"
,
buffer
,
size
,
&
size
,
NULL
);
ok
(
hr
==
S_OK
,
"Expected S_OK, got %08x
\n
"
,
hr
);
ok
(
!
lstrcmpi
(
buffer
,
drive
),
"Expected %s, got %s
\n
"
,
drive
,
buffer
);
ok
(
size
==
lstrlenA
(
drive
)
+
1
,
"Expected size %d, got %d
\n
"
,
lstrlenA
(
drive
)
+
1
,
size
);
}
/* close the INF again */
hr
=
pCloseINFEngine
(
hinf
);
ok
(
hr
==
S_OK
,
"Expected S_OK, got %08x
\n
"
,
hr
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment