diff options
| author | serpilliere <serpilliere@users.noreply.github.com> | 2020-06-08 16:53:55 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-06-08 16:53:55 +0200 |
| commit | 52dc865eaa2b64e45270553f2e036392a848157a (patch) | |
| tree | 46e7311203c7f35294578e44d50fa7de8f01cfb6 | |
| parent | fd82220c5ad3512f00371a8828f63116185a77c3 (diff) | |
| parent | e3fb39a01d9ff8b508cb60e6129bacdbbf74bbc8 (diff) | |
| download | miasm-52dc865eaa2b64e45270553f2e036392a848157a.tar.gz miasm-52dc865eaa2b64e45270553f2e036392a848157a.zip | |
Merge pull request #1248 from Frky/patch-7
Fix MultiByteToWideChar when cbMultiByte = -1
| -rw-r--r-- | miasm/os_dep/win_api_x86_32.py | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/miasm/os_dep/win_api_x86_32.py b/miasm/os_dep/win_api_x86_32.py index a35da991..cc57fba2 100644 --- a/miasm/os_dep/win_api_x86_32.py +++ b/miasm/os_dep/win_api_x86_32.py @@ -1681,7 +1681,20 @@ def kernel32_MultiByteToWideChar(jitter): "cchwidechar"]) if args.codepage != CP_ACP and args.codepage != CP_1252: raise NotImplementedError - src = jitter.vm.get_mem(args.lpmultibytestr, args.cbmultibyte) + # according to MSDN: + # "Note that, if cbMultiByte is 0, the function fails." + if args.cbmultibyte == 0: + raise ValueError + # according to MSDN: + # "Alternatively, this parameter can be set to -1 if the string is + # null-terminated." + if args.cbmultibyte == 0xffffffff: + src_len = 0 + while jitter.vm.get_mem(args.lpmultibytestr + src_len, 1) != b'\0': + src_len += 1 + src = jitter.vm.get_mem(args.lpmultibytestr, src_len) + else: + src = jitter.vm.get_mem(args.lpmultibytestr, args.cbmultibyte) if args.dwflags & MB_ERR_INVALID_CHARS: # will raise an exception if decoding fails s = src.decode("cp1252", errors="replace").encode("utf-16le") |